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语句定然是要访问某些字段的,如果我们用辅助索引来查询,且查询的字段为被辅助索引中的字段和聚集索引的字段并集的子集,那么我们是不需要访问聚集索引了,因为我们需要查询的子段已经找到了,这就是覆盖查询

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值