【问题标题】:Is there ever use for DB indexes like this?有没有使用过这样的数据库索引?
【发布时间】:2011-07-12 00:23:27
【问题描述】:

如果一个表有一个索引(A,B, C,D),是否还有理由也有索引(A,B, Y,Z)(B,A, C,D)

我要问的原因是这两个都提供了合并索引部分的机会,在第一种情况下前缀A,B,在第二种情况下后缀C,D,允许添加复杂索引以较低的成本。也就是说,我从来没有做过这件事,我想知道同时拥有这两个索引是否没有什么优势,或者我只是错过了一些东西。

【问题讨论】:

    标签: database optimization indexing


    【解决方案1】:

    在某些情况下,同时拥有索引(A,B,C,D)(A,B,Y,Z) 是有意义的。如果您假设 A 和 B 是经常使用的列,但选择性不高,而 C 和 D 或 Y 和 Z 的组合具有更高的选择性,但使用频率较低。或者在 A 和 B 自行选择的情况下,对于某些同时选择 C ​​和 D 或 Y 和 Z 的查询有一个覆盖索引很有用。甚至(A,B,C,D)(A,B,Y,Z) 都必须是的情况独特。您甚至可以想出值得在(A,B) 上建立第三个索引的情况,因为您希望对仅指定 A 和 B 的查询进行索引范围扫描尽可能高效。但这些往往是不寻常的情况。

    我不确定我是否遵循您关于合并索引的机会的观点。如果这是您的建议,我不熟悉任何允许多个索引使用相同索引结构的数据库引擎。

    【讨论】:

    • 重新合并:这就是我的想法。如果两个索引具有相同的前缀,那么索引树的前 N ​​级将(或可以)相同(假设为 b 树)并且理论上可以由两者共享。
    猜你喜欢
    • 1970-01-01
    • 2018-10-24
    • 1970-01-01
    • 2016-04-03
    • 1970-01-01
    • 1970-01-01
    • 2014-01-02
    • 1970-01-01
    • 2013-05-05
    相关资源
    最近更新 更多