我可以理解,如果有多个列,索引中某列的排序顺序可能有所不同,但如果索引中只有一列升序与降序一样好吗?
如果索引以错误的方式排序,它似乎只能从最后而不是开头开始。
我有什么遗失的吗?
答案 0 :(得分:1)
索引中列的排序顺序应该没有区别。但是,可能存在细微差别的情况。
在不同的数据库中实现索引的方法有很多种。但是,它们通常是基于树的数据结构,其中的叶子包含有序值和发生值的记录的“地址”。
除了子女的顺序之外,两个相同的索引将具有相同的性能。对于相等比较,该过程通过沿树向下移动来查找值。由于索引相同,因此两个版本具有等效路径。
不相等(“<”和“>”)比较的工作方式基本相同,首先找到阈值,然后从那里向前或向后扫描索引。
所以,问题是:是否会为升序和降序值“相同”地创建两个索引?这是它变得复杂的地方。出于所有实际目的,我相信索引将非常相同。但是,例如,可能存在一些b树的情况,其中分割将不相同。这是由于树中出现的不对称造成的。
例如,在描述b树的Wikipedia page上,向下滚动到Knuth的示例。在插入“4”的步骤中存在不对称性。节点是(1),(2),(3,4)。使用相反的排序顺序,节点将是(4),(3),(1,2)。
最后,索引可能在功能上等同。但是,可能会出现不对称影响某些树叶的深度。
顺便说一句,当我开始考虑这个答案时,我认为正确的答案是索引是相同的。在考虑之后,情况似乎并非如此。