MySQL索引优化方案

1、重要的或数据量大的表sql必须走索引,比如update、delete语句的where条件列,order by、group by、distinct的相关字段,多表join的字段

2、不要使用select *,减少回表,最好直接使用索引里内容进行返回,因为回表时,还会再去查一次

3、不在null上加索引,最好在设计时,就加上默认值,因为null会额外占用存储空间,并且复合索引会无效

4、避免冗余索引,因为联合索引是最左前缀匹配原则,也就是说若有索引(col1,col2,col3),其实他就已经包含了索引(col1)和索引(col1,col2),但并不包含索引(col2,col3)

5、范围查询时,范围列可以用到索引(必须是最左前缀),但范围列后面的列匹配不到索引,同时,索引最多用于一个范围列,若查询条件中有两个范围列,只有一个范围列能走索引。即where a = 1 and b = 2 and c > 3 and d = 4,若建立的是索引(a,b,c,d),则只有abc能匹配到索引,d是匹配不到的;如果是建立的是索引(a,b,d,c)则是可以匹配上

6、=和in是可以乱序排列,mysql的查询优化器可以优化成索引识别的形式

7、尽量少使用or,因为即使一边有带条件的索引也是不会使用的,要想使用or并走索引,就得把or条件中的所有列都加上索引,即where username ='zhangsan' or age=18,只有age和username两个都有索引时,才会走索引

8、在sql上进行条件计算(函数计算或数学运算),不走索引,比如where length(username)now()、或者id/10=1,都是走不了索引

9、不使用负向查询,例如 not in,!= ,not like,<> ,is not null等,这些也走不了索引

下一步我会继续探究分享,MySQL的查询优化器具体实现,以及他选择索引的依据是什么?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值