顺序对多列索引重要吗?

时间:2019-07-11 02:18:15

标签: sql oracle11g

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

How important is the order of columns in indexes?

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

假设我有下表:

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个步骤),对吧?

此外,最后三个答案表示搜索查询中提供了所有列时顺序并不重要。

Oracle: does the column order matter in an index?

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

但是,链接到Oracle's docs的最后一个答案明确指出,从最有选择性的顺序到最无选择性的顺序可以最好地提高查询性能。

这全部是假设我将在索引的不同列上进行所谓的逐层二进制搜索(我已经读过的多个数据源不会发生)。

那我要相信什么?

0 个答案:

没有答案
相关问题