假设我在 MySQL 中有一个这样的表:
CREATE TABLE mytable (
column_A [...],
column_B [...],
column_C [...],
column_X INT(11) UNSIGNED DEFAULT 0, -- type not really relevant
INDEX a_b_c (column_A, column_B, column_C),
INDEX x (column_X)
);
所以基本上它在 A、B、C 列上有一个索引,在 X 列上有一个索引。
现在假设我想执行这样的查询:
SELECT * FROM mytable
WHERE column_A = <something> AND column_B = <something> AND column_C = <SOMETHING>
ORDER BY column_X
上面的索引是否足以使其尽可能高效,或者是否会因为在所有四列上都有索引而受益?
假设 3 个测试使用
=
,那么这将避免进行排序:
INDEX(A,B,C,X)
(并将
INDEX(A,B,C)
视为多余。)
MySQL 本质上从不在一个
SELECT
中使用两个不同的索引。无论如何,INDEX(x)
在这种情况下是没有用的。
发现我所说的一些内容的一种方法:
EXPLAIN SELECT
。EXPLAIN
。EXPLAIN
。WHERE
。ORDER BY
。 (这个名称具有误导性——排序可能或可能不实际上使用磁盘文件;它可以在RAM中完成。)