索引使用与注意事项

23 最左前缀法则

如果索引了多列,称为联合索引。

需要从最左边的列开始,并且不跳过中间的列。

如果跳跃,索引将部分失效。

show index from tb_user;

explain select * from tb_user where profession='软件工程' and age=31 and status='0';
范围查询

出现范围查询(<>),右边的会失效。

解决方案
业务允许条件下,尽量使用<=  >=

24 索引失效情况

1 不要在索引列上运算
select * from tb_user where substring(phone,10,2)='15';
此时索引失效,因为对索引进行了函数运算/
2 字符串类型不加引号
可以查询出来,但是执行计划中没有用到索引。
3 模糊查询
仅仅尾部模糊,索引不失效,
//软件开头的
select * from tb_user where profession like '软件%';
大数据量要去规避模糊查询,
4 or连接的条件
or分隔开的条件,只有两侧都有索引,索引才生效。
解决方案:针对age字段也建立索引。
create index idx_user_age on tb_user(age);
5 数据分布影响
如果mysql评估,使用索引比全表扫描更慢,不使用索引。
select * from tb_user where phone>='177773000';

update tb_user set profession=null;
取决于某个字段在数据库中的分布情况。

26 sql提示

场景

多个索引,系统会选择一个索引进行执行。
我们可以强制让系统使用某个索引,或者不使用哪个。

使用

use index
explain select * from tb_user use index(idx_user_pro) where profession='软件工程';
ignore index
explain select * from tb_user ignore index(idx_user_pro) where profession='软件工程';
force index
explain select * from tb_user force index(idx_user_pro) where profession='软件工程';
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值