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;