为了账号安全,请及时绑定邮箱和手机立即绑定

问mysql索引的最左原则a,b,c三个使用求解?

问mysql索引的最左原则a,b,c三个使用求解?

交互式爱情 2018-07-12 15:31:56
a,b可以用到索引b,a可以么
查看完整描述

1 回答

?
白衣染霜花

TA贡献1796条经验 获得超10个赞

这个要分具体情况,如果是sql中a和b都是等值条件,那么无论索引是(a,b)还是(b,a)都可以用到;但如果a和b有范围条件,比如select * from table where a=xx,b>xx;
这里b>xx是范围条件,假设你有两个索引(a,b)和(b,a),那么这条sql语句数据库优化器会用到索引(a,b);如果只有索引(b,a),语句也可以用到此索引,但根据最左原则,只能用到用到索引中的b列,a列的查找就用不到索引必须得回表查询。这里牵扯到数据库mysql的索引B+tree结构原理,讲起来内容就太多了,建议有时间去看一下二叉树、b树、b+树以及二分查找法的原理。
如果没时间,这里有一个比较好记的方法,就是如果sql语句where条件都是等值的,那么索引列的顺序没那么重要(但根据最左原则,索引最左列最好还是使用选择性高的列);如果sql条件中有范围条件,那么在索引列的顺序就很重要了,关系到能不能命中索引,简单来说,索引中范围条件要尽量往右边放,比如select * from table a=xx,b=xx,c<xx;那么在创建索引时就需要尽量把c列放最后,(a,b,c)或(b,a,c),如果是(c,a,b),虽然也能用到索引,但效率会很差。

查看完整回答
1 反对 回复 2018-07-14
  • 1 回答
  • 0 关注
  • 1039 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信