重温索引优化

1. 索引失效

1.1 普通索引

场景一:SELECT * FROM user_info WHERE id + 1 = 2;

索引的列如果是表达式的一部分或者是函数的参数,则失效。

场景二:SELECT * FROM user_info WHERE name LIKE '%ook';

like查询前面部分未输入,以%开头无法命中索引。
可以使用覆盖索引(type=index)。

场景三:SELECT * FROM user_info WHERE id <> 1;

查询条件使用不等式(<>或者!=)。

场景四:SELECT * FROM user_info WHERE name = 1;

查询条件类型不一致。
字符串跟数字的比较,它们类型不匹配,MySQL会做隐式的类型转换,把它们转换为浮点数再做比较。

场景五:

mysql查询单表时,查询得到的结果集占数据总量很大比例30%,mysql会认为全表扫描会优于索引,则不走索引。
不要给’性别’等增加索引。如果某个数据列里包含了均是"0/1"或“Y/N”等值,即包含着许多重复的值,就算为它建立了索引,索引效果不会太好,还可能导致全表扫描。

场景六:

使用or连接的两个字段,如果两个字段都是索引字段索引才会生效(index_merge),否则索引无效。

场景七:

使用NOT IN的时候索引可能会失效,进而使用全表查询。

1.2 复合索引

场景一:

不使用索引首列当查询条件(最左前缀)。


2. EXPLAIN语句

CREATE TABLE `user_info` (
  `id`   BIGINT(20)  NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(50) NOT NULL DEFAULT '',
  `age`  INT(
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值