为什么多个独立索引总是比串联索引好

zin*_*ing 6 index index-tuning

索引合并:组合多个索引

这是关于索引的最常见问题之一:是为 where 子句的每一列设置一个索引还是为所有列设置一个索引更好?在大多数情况下,答案非常简单:多列的索引更好——即串联索引或复合索引。“连接索引”详细解释了它们。

在这种情况下,我完全可以理解这个断言:

TABLE( A,B,C )?
Indexing 1: Index A, Index B, Index C
Indexing 2: Index (A,B,C)
Query: JOIN ON X.B=B AND X.C=C
Run Code Online (Sandbox Code Playgroud)

因为在这种情况下,索引 2 根本无法使用(我知道例外情况)

但在这种情况下:

TABLE( A,B,C )?
Indexing 1: Index A, Index B, Index C
Indexing 2: Index (A,B,C)
Query: JOIN ON X.A=A X.B=B AND X.C=C
Run Code Online (Sandbox Code Playgroud)

我认为索引 2 更好,它只需要遍历 1 个索引树而不是 3 个,对吗?

小智 7

原作者在此。

引用的意思如下:

在您的第一个查询中,仅过滤 B 和 C,什么会更好:

Indexing 1: Index B, Index C
Indexing 2: Index (B,C)
Run Code Online (Sandbox Code Playgroud)

显然,索引 2 更好。

上下文的意思是:如果我索引所有列,最好为所有列设置一个索引,还是每个列都有一个单独的索引。在这种情况下,几乎总是更好地使用所有列。

这是一个设计建议,而不是用于评估。

  • 并且不要忘记阅读问题中引用的页面!它还包括有关两列内容的特定信息。仅仅因为查询限制在 2 列上并不意味着两列上的索引总是更好!如果第一列已经是唯一的或“主要是唯一的”,那么仅索引第一列会导致更小的索引并访问实际表以检查第二列的值可能更有效。 (3认同)