我理解索引为什么很重要。我了解为什么在仅使用多列索引中的几列进行查询时顺序很重要。我不明白的是,为什么似乎有一个从最大到最小基数/选择性排序的经验法则。我看不出任何性能提升源于何处,并且发现了相互矛盾的结果。
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的最后一个答案明确指出,从最有选择性的顺序到最无选择性的顺序可以最好地提高查询性能。
这全部是假设我将在索引的不同列上进行所谓的逐层二进制搜索(我已经读过的多个数据源不会发生)。
那我要相信什么?