mysql的单例索引和联合索引

-- 联合索引查询第一个、第二个参数(走索引)
explain select * from emp where ENAME = 'wang' and JOB 

 

单例索引:在数据库的单例上建立的索引。

联合索引:在数据库的多列上建立的索引。

 

两者使用区别:

如果在一个大量的数据库表中的需要进行查询的话,仅仅只是针对某一个条件进行查询的话,建立单例索引就能满足;

如果每次查询总是多个条件进行 and连接 查询的时候,可以建立联合索引,多列单索引查询只会第一个起作用(mysql遵从最左原则);但是需要注意where后面的查询条件的顺序,例如建立的联合索引为 字段a,字段b,字段c;则查询where后面的条件必须包括字段a,一般的情况下都会按照联合索引的顺序填写where查询条件,节省mysql的自动调整的开销

如果条件是进行 or连接 查询的时候,此时联合索引会失效,这个时候就可以使用多个单列索引,此时是多个索引合并Using union(comm,deptNo); Using where,但是这种情况下索引也要酌情建立,索引太多不利于维护

 

以下示例:验证

-- 建立了单例索引COMM、DEPTNO;复合索引ENAME,JOB,SAL

 

-- 联合索引查询第一个参数(走索引)
explain select * from emp where ENAME = 'wang';
View Code

 

 

-- 联合索引查询第一个、第二个参数(走索引)
explain select * from emp where ENAME = 'wang' and JOB = '1'

-- 联合索引查询第一个、第二个、第三个参数(走索引)
explain select * from emp where ENAME = 'wang' and JOB = '1' and SAL = '1'

-- 联合索引查询第一个、第三个参数(走索引,有额外开销)
explain select * from emp where ENAME = 'wang' and SAL = '1'

 

-- 联合索引查询第三个参数、第一个参数(走索引,会有额外开销)
explain select * from emp where SAL = '1' and ENAME = 'wang'

 

-- 联合索引查询第二个、第三个参数(不会走联合索引)
explain select * from emp where JOB = '1' and SAL = '1'

 

 

 

-- 联合索引 or查询 第一个、第二个参数(不会走联合索引)
explain select * from emp where  ENAME = 'wang' or JOB = '1' 

-- 使用两个单例索引一块查询(会进行合并)
explain select * from emp where COMM = '1' or DEPTNO = '1'

 

 

 

posted @ 2019-11-14 22:25  Java半路人生  阅读(839)  评论(0)    收藏  举报