mysql优化的例子_MySql性能优化实战篇3-优化实例操作篇

实例1:复合索引的最佳左前缀原则(where ... order by ...)

创建如下表和索引

CREATE TABLE test03(a1 INT(4) NOT NULL,a2 INT(4) NOT NULL,a3 INT(4) NOT NULL,a4 INT(4) NOT NULL);ALTER TABLE test03 ADD INDEX idx_a1_a2_a3_a4(a1,a2,a3,a4);

看第一种sql语句的执行计划如下:(where 后面的条件与索引顺序一致)

EXPLAIN SELECT a1,a2,a3,a4 FROM test03 WHERE a1=1 AND a2=1 AND a3=1 AND a4=1;

第二种sql语句的执行计划如下:(where 后面的条件与索引顺序不一致)

EXPLAIN SELECT a1,a2,a3,a4 FROM test03 WHERE a4=1 AND a3=1 AND a2=1 AND a1=1;

22e7cb2259ac6d43a1fd984e781f9f72.png

如上两者的执行计划一模一样,为什么?

因为第二条sql在真正执行前经过了sql优化器的调整,所以与上条保持一致。第一种sql是推荐写法。

再看一个如下sql语句:

EXPLAIN SELECT a1,a2,a3,a4 FROM test03 WHERE a1=1 AND a2=1 AND a4=1 ORDER BY a3;

5f80c7b5b994983e278dce872f8b79b3.png

我们看执行计划的结果:使用了using where,则进行了回表查询,索引失效。以上sql用到了a1,a2两个索引,该两个字段不需要回表查询,因此是using index,而a4因为跨列使用,造成了索引失效,需要回表查询,因此是using where,以上可

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值