当前位置:   article > 正文

mysql 索引失效情况/sql提示/覆盖索引和回表查询

mysql 索引失效情况/sql提示/覆盖索引和回表查询

索引失效

1:模糊查询,当我们建立一个索引emp_name时,对emp_name进行模糊查询时,索引是不会生效的,因为搜索树不支持[学了数据结构就是爽]

2:or条件查询,当我们写了一个由or链接的条件语句时,当且仅当语句中存在一个或以上的字段没有建立索引时,语句中的全部索引都不会生效,这个很好理解,因为存在一个无索引字段说明我们要对整个表进行一次扫描,这个时间复杂度是o(n)的,所以o(logn / 1)的查询就变得没有必要了

3:字符字段不加双引号,这个...I don't understand

4 :mysql评估使用索引比全表扫描还慢的话,则不使用索引;

sql提示

使用情景:

当我们写一个查询语句时,用到的条件语句可以对于多个索引,系统会评判索引的效率,然后选择使用哪个索引,但是有的时候我们需要指定某个索引,这个时候我们就可以用sql提示了

1:use提示

        建议系统用每个索引,但是最终决策权在系统。

select 字段1,字段2... from table use(index_name) where expression

2:ignore提示

        与use相反,ignore是建议系统忽略某个索引

select 字段1,字段2... from table ignore(index_name) where expression

3:force提示

        强制系统使用某个索引,如果指定的索引不合法,则报错

select 字段1,字段2... from table force(index_name) where expression

覆盖索引/回表查询

首先,索引分为聚集索引和辅助索引,在B+树结构中,聚集索引中的叶子节点会存储一行的数据,辅助索引是存储对于行的聚集索引字段,当我们要查询一行的所有数据且用辅助索引时,系统会先在辅助索引中找到对应行的聚集索引的字段和辅助索引的字段,然后根据聚集索引来找到对应行数据并返回;

这里就引申出覆盖索引和回表查询的概念了,首先我们用select语句定然是要访问某些字段的,如果我们用辅助索引来查询,且查询的字段为被辅助索引中的字段和聚集索引的字段并集的子集,那么我们是不需要访问聚集索引了,因为我们需要查询的子段已经找到了,这就是覆盖查询

回表查询是“通过辅助索引找到聚集索引的字段如,然后到聚集索引找数据”的过程

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/561002
推荐阅读
相关标签
  

闽ICP备14008679号