【问题标题】:How does mysql work with two equal indices?mysql 如何处理两个相等的索引?
【发布时间】:2011-09-28 06:34:20
【问题描述】:

当使用不同的索引名称时,Mysql 不会阻止为相同的列创建索引。我想内部只有一个索引被创建和更新,但我最好在这里问一下这是不是真的。

当我的建议不正确时,为什么要多次维​​护索引?

【问题讨论】:

    标签: mysql indexing


    【解决方案1】:

    @Tomalak 提到的应该只维护一个索引。检查此链接一次

    How do MySQL indexes work?

    http://www.mysqlperformanceblog.com/2006/08/17/duplicate-indexes-and-redundant-indexes/

    添加:

    可能存在列上有冗余索引的情况。您可以使用 SP 找到它们

    I_S_REDUNDANT_INDEXES: lists all redundant indexes
    

    删除它们

    I_S_REDUNDANT_INDEXES_DROP 
    

    查看此链接

    http://malcook-gedanken.blogspot.com/2008_10_01_archive.html

    【讨论】:

    • SP = 存储过程。这些是查找/列出冗余 indexex 并根据需要删除它们的存储过程。用于针对数据库。检查此链接malcook-gedanken.blogspot.com/2008_10_01_archive.html
    • 对,所以这些是必须在“社区反馈部分”中查找并在您的数据库中创建的存储过程。这可能值得在您的回答中提及...?
    • @Tomalak,我在回答中确实提到了它们。您是否希望我也将此链接添加到我的答案中?到时会这样做。
    • 我认为它会很有用,是的。您指的是第三方编写的具体程序。
    【解决方案2】:
    • 是的,我希望这两个索引中只有一个实际上是在内部维护的。但这没关系,因为你不应该这样做。

    • 没有理由维护两个重复的索引。

    【讨论】:

    • 在另一个项目的架构中找到了这个,我不是开发人员。在这个问题中,我的意思是 mysql 不是程序员维护索引。
    • @giftnuss:是的,我使用了相同的“维护”含义。我认为您应该问开发人员为什么这样做,因为它很愚蠢而且没有目的(尽管最终是无害的)。
    【解决方案3】:

    MySQL 允许您创建冗余索引并对其进行维护。

    试试mk-duplicate-key-checker,这是一个很好的工具,可以找到重复/冗余索引。输出具有用于删除重复项的 ALTER TABLE 语句,因此您可以将其作为 SQL 脚本运行。但我建议在执行之前查看输出。

    【讨论】:

      【解决方案4】:

      还有一种情况是,一个表有两个索引,一个用于field-1,另一个用于(field-1, field-2)。第二个索引使第一个不再需要,但我怀疑 MySQL 除了维护两个索引之外所做的任何事情。

      开发人员或 DBA 的工作是确定索引是否重复或冗余并且应该被删除。

      我猜首先出现这种重复的原因是有人过去使用索引进行了测试以优化某些查询,但完成后忘记删除它们。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-19
        • 1970-01-01
        • 2018-12-22
        • 2011-01-21
        • 2021-12-27
        • 1970-01-01
        相关资源
        最近更新 更多