小编典典

MySQL可以对单个查询使用多个索引吗?

mysql

想象一个有多列的表,例如id, a, b, c, d, e。我通常按​​进行选择id,但是,客户端应用程序中有多个查询,它们对列的子集使用各种条件。

当MySQL在多列有多个WHERE条件的单个表上执行查询时,它真的可以利用在不同列上创建的索引吗?还是使其快速的唯一方法是为所有可能的查询创建多列索引?


阅读 1536

收藏
2020-05-17

共1个答案

小编典典

是的,MySQL可以对单个查询使用多个索引。优化器将确定哪些索引将使查询受益。您可以EXPLAIN用来获取有关MySQL如何执行语句的信息。您可以使用如下提示来添加或忽略索引:

SELECT * FROM t1 USE INDEX (i1) IGNORE INDEX FOR ORDER BY (i2) ORDER BY a;

我建议阅读有关MySQL如何使用索引的内容

只是摘录:

如果可以在多个索引之间进行选择,则MySQL通常会使用查找最少行数的索引。

如果col1和col2上存在多列索引,则可以直接获取适当的行。如果col1和col2上存在单独的单列索引,则优化器将尝试使用索引合并优化(请参见第8.2.1.4节“索引合并优化”),或尝试通过确定哪个索引发现的索引较少而找到限制性最强的索引。行并使用该索引来获取行。

2020-05-17