面试实战:聊如何避免索引失效?

(1) 范围查询, 右边的列不能使用索引, 否则右边的索引也会失效.

索引生效案例
select * from tb_seller where name = "小米科技" and status = "1" and address = "北京市"; 
select * from tb_seller where name = "小米科技" and status >= "1" and address = " 北京市"; 
索引失效案例
select * from tb_seller where name = "小米科技" and status > "1" and address = "北京市"; 

address 索引失效, 因为 status 是大于号, 范围查询.

(2) 不要在索引上使用运算, 否则索引也会失效.

比如在索引上使用切割函数, 就会使索引失效.

select * from tb_seller where substring(name, 3, 2) = "科技"; 

(3) 字符串不加引号, 造成索引失效.

如果索引列是字符串类型的整数, 条件查询的时候不加引号会造成索引失效. Mysql 内置的 优化会有隐式转换.
索引失效案例

select * from tb_seller where name = "小米科技" and status = 1 

(4) 尽量使用覆盖索引, 避免 select *, 这样能提高查询效率.

如果索引列完全包含查询列, 那么查询的时候把要查的列写出来, 不使用 select *

select sellerid, name, status from tb_seller where name = "小米科技" and staus = "1" and address = "西安市";

(5) or 关键字连接

用or 分割开的条件, 如果 or 前面的列有索引, or 后面的列没有索引, 那么查询的时候前后索引都会失效。
如果一定要用or 查询, 可以考虑下 or 连接的条件列都加索引, 这样就不会失效了.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值