多列索引有两个意思,一个是在多个列上建立一个索引,另一个意思是在多个列上分别建立索引。
比较直观能够想到,如果是在多个列上建立一个索引,那么如果where条件里正好又是这些列,那么将获得较好的性能。如果分别建立索引,where中又有多个分别建立的索引的列,那mysql优化器将如何处理呢?
EXPLAIN SELECT sakila.actor.first_name, sakila.actor.last_name FROM sakila.actor where sakila.actor.first_name=’a’ or sakila.actor.last_name=’b’
结果:
可见在or条件时,mysql优化器会分别使用索引查询然后进行union操作EXPLAIN SELECT sakila.actor.first_name, sakila.actor.last_name FROM sakila.actor where sakila.actor.first_name=’a’ and sakila.actor.last_name=’b’, 结果: