首页 > 解决方案 > 多列索引的顺序重要吗?

问题描述

我明白为什么索引很重要。我理解为什么仅使用多列索引中的几列进行查询时顺序很重要。我不明白为什么似乎有一个经验法则可以从最大到最小基数/选择性进行排序。我看不出任何性能提升会从何而来,而且我发现了相互矛盾的结果。

索引中列的顺序有多重要?

在上面的链接中,最佳答案似乎真的没有意义。我认为无论您执行二进制搜索操作的顺序如何,都需要同样多的步骤才能找到正确的组合。

假设我有下表:

A   B
--  --
1   a
2   a
3   a
4   a
5   b
6   b
7   b
8   b

假设我正在寻找(1,a)。如果我首先在 A 列上执行二进制搜索,我需要三个步骤来获得“1”,然后“a”是给定的。如果我首先对 B 列执行二进制搜索,我需要 1 步将结果缩小到“a”,然后再执行 2 步才能得到“1”(对数字 1-4 进行二进制搜索)。无论哪种方式,我都在执行相同数量的步骤(总共 3 个),对吧?

除此之外,最后 3 个答案说,当搜索查询中提供所有列时,顺序无关紧要。

Oracle:索引中的列顺序重要吗?

在上面的链接中,最重要的答案表明应将具有 LEAST 不同值的列放在首位。事实上,这对我来说更有意义,因为跳过读取似乎实际上提高了性能。(如果有人可以对我进行 Eli5 索引压缩,那就太好了。)

但是,链接到Oracle 文档的最后一个答案明确指出,从最具选择性到最不具有选择性的排序可以提高查询性能。

这一切都假设我将在索引中的不同列上称为逐层二进制搜索(我读过的多个来源都说不会发生)。

那我该相信什么?

标签: sqloracle11g

解决方案


推荐阅读