使用 MySQL,多个单列索引是否比一个多列索引更快?

use*_*601 7 mysql innodb performance index

我有一个与性能相关的问题,在 MySQL 中,多个单列索引是否比一个多列索引快?

Rol*_*DBA 6

简答

仅作为最后的手段

长答案

对于 MySQL Query Optimizer 来说,拥有多个索引可能是一个相当艰巨的冒险。

我以前写过这个

本质上,MySQL 将沿多个索引进行查找并对结果执行索引合并。如果没有复合索引是针对您的查询的可用这只会做作为最后的手段WHEREGROUP BYORDER BY条款。

多列索引中列的顺序也有关系。如果您有以下情况:

  • 带索引的表 (a),(b),(c)
  • 带索引的同一张表 (a,b,c)

三列索引是,如果更好的WHEREGROUP BYORDER BY子句利用在索引中的顺序索引列(a,b,c)。任何不同的组合都可能导致索引范围扫描(a,b,c)。下一个最佳选择可能是(a,b,c). 如果这些都不可能,最后的办法就是合并搜索(a), (b), (c)