当前位置: 首页 > 科技观察

因为查询没有命中索引,直接查了数据库,崩溃了

时间:2023-03-15 01:40:26 科技观察

大家都知道,如果在数据库中使用索引来检索数据,你的查询效率会大大提高。这可能需要大约三秒钟甚至四秒钟。查询SQL,加了索引之后,至少可以提高30%的查询率,那么加了索引怎么才能让你的查询命中索引呢?我应该如何索引我自己的表结构?这就是阿芬要说的。索引失效在我们的日常开发中,经常会在创建表后为对应的表创建索引。这个指标的定义一般是根据我们自己的业务需要,但也有一些是根据我们自己的。业务需求完成后,发现有些查询明明用了索引,但最后发现我的索引失效了。那么导致索引失败的棘手操作有哪些呢?其实就是七个字,型号数,空运最快型号:模糊查询的意思。如果like的模糊查询以%开头,则索引无效。例如:SELECT*FROMuserWHEREnameLIKE'%极客科技';type:表示数据类型。如果类型不对,比如字段类型是varchar,where条件用的是number,索引也会失败。例如:SELECT*FROMuserWHEREheight=10;height是varchar类型,导致索引失败。数:表示功能。在索引字段上使用内部函数将使索引无效。在这种情况下,应该创建一个基于函数的索引。例如:SELECT*FROMuserWHEREDATE(create_time)='2020-09-03';如果create_time字段设置了索引,则不能使用该函数,否则索引失败。空:表示Null。索引不存储空值。如果不限制索引列不为空,数据库会认为索引列中可能有空值,所以不会按照索引计算。例如:SELECT*FROMuserWHEREaddressISNULL不去索引。选择*FROMuserWHERE地址不为空;去索引。建议大家在设计字段的时候,如果没有必要要求必须为NULL,那么最好给一个空字符串的默认值,这样可以解决很多后续的麻烦(切记)。云:就是操作的意思。对索引列进行(+,-,*,/,!,!=,<>)等操作会导致索引失效。例如:SELECT*FROMuserWHEREage-1=20;most:就是最左原则。复合索引中索引列的顺序很关键。如果不从索引的最左边的列开始搜索,就不能使用索引。快:全表扫描意味着更快。如果希望数据库使用全表扫描比使用索引更快,则不要使用索引。如何建立索引?这时候如果面试官问你,如何建立索引就是索引的规范,你应该怎么回答呢?其实这是在问你,你在设计表的时候,表中的索引怎么设计比较合适呢?阿芬列举几个:1.经常和其他表连接的表,应该在连接字段上建立索引,也就是在关联条件上建立索引,比如a.id的id=b.aida表,也就是主键。这时候我们需要为a表对应的b表的id创建一个索引,这样在使用关联查询的时候,就可以命中该索引。2、Where子句中经常出现的字段,尤其是大表的字段,应该建立索引3、索引应该建在小字段上。对于大文本字段甚至超长字段,不要建立索引4.频繁数据不要为要操作的表建立过多索引。5.在经常需要排序的列上创建索引。6、为关键字orderby、groupby、distinct后面经常出现的字段创建索引。哪些字段不适合建立索引这些字段是应该建立索引的字段,那么什么样的表字段不适合建立索引呢?1.不应该为查询中很少使用或引用的列创建索引。2、不要在有大量相同值的字段上创建索引。3.当修改性能远大于检索性能时,不应该创建索引。这是因为修改性能和检索性能是相互矛盾的。添加索引时,检索性能会提高,但修改性能会降低。减少索引时,会提高修改性能,降低检索性能。因此,当修改性能远大于检索性能时,不应创建索引。所以我们在创建表的时候,一个合适的索引可以加快我们的查询速度,而一个不合适的索引对我们的表来说是有害无益的。你学会了吗?