在线
客服

发布
需求

天盟
APP

天盟APP下载

关注
微信

微信扫一扫访问
顶部

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

a,b可以用到索引
b,a可以么

免责声明:本内容仅代表回答会员见解不代表天盟观点,请谨慎对待。

版权声明:作者保留权利,不代表天盟立场。

使用道具 举报

全部参与1

这个要分具体情况,如果是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

使用道具 举报

发新帖
国内首家创新型IT技术需求众包服务平台,软件需求就上天盟网! 立即登录 立即注册