我一直在阅读composite indexes有关订购的信息,但我有点困惑。这个文档(不到一半)说
通常,您应该将最常使用的列放在索引中。
然而,不久之后它说
创建一个组合索引,将最具选择性的列放在首位;也就是说,具有最多值的列。
换句话说,Oracle 也在这里说
如果所有键在 WHERE 子句中的使用频率相同,则在 CREATE INDEX 语句中将这些键从选择性最高到选择性最低的顺序最能提高查询性能。
但是,我发现了一个不同的答案。它说
将选择最少的列排在最前面,将选择最多的列排在最后。在与列有联系的情况下,更有可能单独使用。
我引用的第一个文档说你应该首先使用最常用的,而 SO 答案说这应该只用于打破平局。然后他们在订购上也有所不同。
该文档还谈到skip scanning并说
如果复合索引的前导列中的不同值很少,而索引的非前导键中有许多不同的值,则跳过扫描是有利的。
另一篇文章说
前缀列应该是最有辨别力,在查询中使用最广泛的
我认为最有辨别力的就是最独特的。
所有这些研究仍然让我想到同样的问题;最具选择性的列应该是第一个还是最后一个?第一列是否应该是抢七局中使用最多且最具选择性的列?
这些文章似乎相互矛盾,但它们确实提供了一些示例。从我收集的,它似乎是更有效的least selective column是第一个在订购,如果你正期待Index Skip Scans。但我不确定这是否正确。