数据库运维
记录DBA学习成长历程

MySQL的联合索引设置分析总结

1. where 条件中出现等值查询条件

SELECT * FROM t1 WHERE a= b= 
我们建立联合索引时:
ALTER TABLE t1 ADD INDEX idx_a_b(a,b); 
ALTER TABLE t1 ADD INDEX idx_b_a(b,a); 
以上的查询不考虑索引的顺序,优化器会自动调整where的条件顺序
注意: 我们在这种情况下建索引时,需要考虑哪个列的唯一值更多,哪个放在索引左边.

2.where 条件中出现不等值查询条件

alter table t_100w add index idx_num_k1(num,k1);
DESC SELECT * FROM t_100w WHERE num <100 AND k1='JN';(key_len=5,只走1个索引)
我们建索引时:
alter table t_100w drop index idx_num_k1;
ALTER TABLE t_100w ADD INDEX idx_k1_num(k1,num);
语句书写时
DESC SELECT * FROM t_100w WHERE k1='JN' AND num <100 ;(key_len=14,走2个索引)
有多个and条件时,按照先等值再走比较条件顺序,如果先走不等值的后面就不再走索引。

3. 如果查询中出现多子句

前提条件(等值)我们要按照子句的执行顺序进行建立索引.
select * from t_100w where num=100 order by k1;
赞(1)
MySQL学习笔记 » MySQL的联合索引设置分析总结