我是否需要 N+1 列上的索引,以便有效地对 N 列执行 SELECT 操作,并按其他列排序?

问题描述 投票:0回答:1

假设我在 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

上面的索引是否足以使其尽可能高效,或者是否会因为在所有四列上都有索引而受益?

mysql database-indexes
1个回答
1
投票

假设 3 个测试使用

=
,那么这将避免进行排序:

INDEX(A,B,C,X)

(并将

INDEX(A,B,C)
视为多余。)

MySQL 本质上从不在一个

SELECT
中使用两个不同的索引。无论如何,
INDEX(x)
在这种情况下是没有用的。

发现我所说的一些内容的一种方法:

  1. 用你拥有的东西运行
    EXPLAIN SELECT
  2. 添加我的 4 列索引并重新运行
    EXPLAIN
  3. 删除 3 列索引并重新运行
    EXPLAIN
  • “Key_len”表示索引的多少列用于
    WHERE
  • “使用文件排序”表示索引用于
    ORDER BY
    。 (这个名称具有误导性——排序可能或可能不实际上使用磁盘文件;它可以在RAM中完成。)
© www.soinside.com 2019 - 2024. All rights reserved.