【发布时间】:2011-09-28 06:34:20
【问题描述】:
当使用不同的索引名称时,Mysql 不会阻止为相同的列创建索引。我想内部只有一个索引被创建和更新,但我最好在这里问一下这是不是真的。
当我的建议不正确时,为什么要多次维护索引?
【问题讨论】:
当使用不同的索引名称时,Mysql 不会阻止为相同的列创建索引。我想内部只有一个索引被创建和更新,但我最好在这里问一下这是不是真的。
当我的建议不正确时,为什么要多次维护索引?
【问题讨论】:
@Tomalak 提到的应该只维护一个索引。检查此链接一次
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
【讨论】:
是的,我希望这两个索引中只有一个实际上是在内部维护的。但这没关系,因为你不应该这样做。
没有理由维护两个重复的索引。
【讨论】:
MySQL 允许您创建冗余索引并对其进行维护。
试试mk-duplicate-key-checker,这是一个很好的工具,可以找到重复/冗余索引。输出具有用于删除重复项的 ALTER TABLE 语句,因此您可以将其作为 SQL 脚本运行。但我建议在执行之前查看输出。
【讨论】:
还有一种情况是,一个表有两个索引,一个用于field-1,另一个用于(field-1, field-2)。第二个索引使第一个不再需要,但我怀疑 MySQL 除了维护两个索引之外所做的任何事情。
开发人员或 DBA 的工作是确定索引是否重复或冗余并且应该被删除。
我猜首先出现这种重复的原因是有人过去使用索引进行了测试以优化某些查询,但完成后忘记删除它们。
【讨论】: