1

我可以理解如果索引中的列不止一列,那么索引中列的排序顺序可能会有所不同,但是如果索引中只有一列是升序和降序一样好?

如果索引以错误的方式排序,它似乎可以从末尾而不是开头开始。

有什么我想念的吗?

4

1 回答 1

1

索引中列的排序顺序不应该有区别。但是,可能存在细微差别的情况。

在不同的数据库中实现索引有不同的方法。但是,它们通常是基于树的数据结构,其叶子包含有序值和值出现的记录的“地址”。

两个相同的索引,除了它们的孩子的排序,将具有相同的性能。对于相等比较,该过程通过沿着树向下查找值来工作。因为索引相同,所以两个版本具有相同的路径。

不等式(“<”和“>”)比较的工作方式基本相同,首先找到阈值,然后从那里向前或向后扫描索引。

所以,问题是:是否会为升序和降序值创建“相同”的两个索引?这就是复杂的地方。出于所有实际目的,我相信这些索引将非常等效。但是,在某些情况下,例如,b-tree 的拆分可能会相同。这是由于树中出现的不对称性而发生的。

例如,在描述 b 树的Wikipedia 页面上,向下滚动到来自 Knuth 的示例。在插入“4”的步骤中存在不对称性。节点是 (1),(2),(3,4)。使用相反的排序顺序,节点将是 (4),(3),(1,2)。

最后,索引可能在功能上是等效的。然而,可能会出现不对称,这会影响一些叶子的深度。

顺便说一句,当我开始考虑这个答案时,我认为正确的答案是索引是相同的。想了想,好像不是这样的。

于 2013-01-29T20:20:14.960 回答