您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

mysql联合索引命中条件

bubuko 2022/1/25 20:05:03 mysql 字数 1209 阅读 884 来源 http://www.bubuko.com/infolist-5-1.html

转于:https://blog.csdn.net/claram/article/details/77574600 首先明确:为什么要用联合索引? 对于查询语句“SELECT E.* FROM E WHERE E.e1=1 AND E.e3=2”涉及到两列,这个时候我们一般采用一个联合索引(e1, e ...

转于:https://blog.csdn.net/claram/article/details/77574600

首先明确:为什么要用联合索引?

对于查询语句“SELECT E.* FROM E WHERE E.e1=1 AND E.e3=2”涉及到两列,这个时候我们一般采用一个联合索引(e1, e3);而不用两个单列索引,这是因为一条查询语句往往应为mysql优化器的关系只用一个索引,就算你有两个索引,他也只用一个;在只用一个的基础之上,联合索引是会比单列索引要快的;

下面讲讲联合索引的使用规则和哪些情况会命中不了联合索引


示例如下。首先创建表:
CREATE TABLE E (e1 INT, e2 VARCHAR(9), e3 INT, PRIMARY KEY(e1, e3));
这样就建立了一个联合索引:e1,e3

测试数据

INSERT INTO E
(e1, e2, e3)
VALUES(1, ‘aa‘, 2);


触发联合索引是有条件的:
1、使用联合索引的全部索引键,可触发索引的使用。
例如:SELECT E.* FROM E WHERE E.e1=1 AND E.e3=2

2、使用联合索引的前缀部分索引键,如“key_part_1 <op>常量”,可触发索引的使用。
例如:SELECT E.* FROM E WHERE E.e1=1

3、使用部分索引键,但不是联合索引的前缀部分,如“key_part_2 <op>常量”,不可触发索引的使用。
例如:SELECT E.* FROM E WHERE E.e3=1

4、使用联合索引的全部索引键,但索引键不是AND操作,不可触发索引的使用。
例如:SELECT E.* FROM E WHERE E.e3=2 OR E.e1=1

 

以上通过explain测试即可看出效果

mysql联合索引命中条件

原文:https://www.cnblogs.com/wueryuan/p/12372245.html


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶