【问题标题】:Do mysql composite indexes make some other indexes completely redundant?mysql 复合索引是否会使其他一些索引完全冗余?
【发布时间】:2011-06-28 17:17:18
【问题描述】:

如果我在 (a, b) 上有一个复合索引,我知道仅与“a”相关的查询仍将使用复合索引(但不与“b”相关的查询)

我的问题是,如果我有 (a, b) 索引,是否有任何正当理由在“a”上有一个单列索引?关于 (a,b) 索引是完全替代 a 还是仅仅是“聊胜于无”的索引,我所读到的内容似乎含糊不清。

这假设我同时按 a 和 a,b 进行过滤。我有一个表,其中包含太多索引,这会损害写入性能,并且想要在删除索引之前仔细检查,我只是相当确定这些索引没有任何好处。

另外,这个答案是否会根据我使用的是 InnoDb 还是 MyISAM 而改变?相关的表是 MyISAM,但我们的大部分表都是 InnoDb。

【问题讨论】:

    标签: mysql indexing composite-index


    【解决方案1】:

    您的 (a,b) 索引也将处理仅涉及“a”的查询,并且不需要单独在 (a) 上建立索引。

    来自the documentation

    如果表格有一个多列 索引,任何最左边的前缀 优化器可以使用索引来 查找行。

    例如,如果您有一个 (col1, col2, col3),你已经建立了索引搜索 (col1),(col1,col2)上的功能, 和 (col1, col2, col3)。

    【讨论】:

      【解决方案2】:

      我的问题是,如果我有 (a, b) 索引,是否有任何正当理由在“a”上使用单列索引?

      不,如果 (a,b) 上有索引,则没有理由在 (a) 上设置索引

      【讨论】:

        猜你喜欢
        • 2018-01-01
        • 1970-01-01
        • 2018-06-06
        • 2012-07-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多