mysql索引注意事项浅析

1、不在索引列上做任何操作(计算、函数、(自动、手动)类型转换),会导致索引失效而转向全表扫描。

2、尽量使用覆盖索引(只访问索引的查询(索引列和查询列一致)),减少select * 的操作。
补充:在工作过程中,一定不要使用select *的操作,尤其是大厂,会进行慢sql查询,会被要求修改。
3、mysql在使用不等于(!= 或者 <>)的时候无法使用索引而转向全表扫描。
4、is null 、is not null 也无法使用索引。
5、like以通配符开头(’%abc…’),mysql索引失效会变成全表扫描。
解决方式:如果想使用like '%abc…%'进行,模糊查询,可以采用索引覆盖方式。例如:
在这里插入图片描述
如上图所示:联合索引(name,status)做如下查询
在这里插入图片描述
模糊查询的通配符在后面,且查询字段符合索引列(id这里可能有些人有疑问,因为mysql的索引本质是B+树,在创建树的时候,会将主键id一起存储,想了解具体的知识点,可以去某站查看索引本质教学),可以使用索引进行查询,如上如所标识。

如果查询所有列,如下图所示:
在这里插入图片描述
会造成全表扫描,在大数量的表中,及其影响效率。
补充:此处的模糊查询通配符不管怎么写都是全表扫描。

6、字符串不加单引号索引失效(这个是最基本的,也是重要的一点)。
如下图所示,name是varchar类型,匹配1000,mysql会隐式的做类型转换,造成索引失效
在这里插入图片描述
如下图所示:name查询带’'的数据:
在这里插入图片描述

7、少用or,用它来连接时会索引失效。
8、注意联合索引的最左匹配原则(开头列、中间列不要跳过)。
补充:开头列、或者中间列跳过的话,会造成索引失效。
9、全值匹配我最爱。
10、存储引擎不能使用索引中 范围条件 右边的列

未完,待续中。。。。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值