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