问mysql索引的最左原则a,b,c三个使用求解?
免责声明:本内容仅代表回答会员见解不代表天盟观点,请谨慎对待。
版权声明:作者保留权利,不代表天盟立场。
|
|
|
|
这个要分具体情况,如果是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 |
|
|
|
|