mysql如何使用两个相等的索引?

时间:2011-07-04 16:29:21

标签: mysql indexing

当使用不同的索引名称时,Mysql不会阻止为同一列创建索引。我想在内部只创建并更新了一个索引,但我最好在这里询问是否属实。

当我的建议不正确时,维持索引多次的原因是什么?

4 个答案:

答案 0 :(得分:3)

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

How do MySQL indexes work?

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

ADD:

可能存在列上具有重复索引的情况。您可以使用SP

找到它们
I_S_REDUNDANT_INDEXES: lists all redundant indexes

删除它们

I_S_REDUNDANT_INDEXES_DROP 

请参阅此链接

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

答案 1 :(得分:2)

  • 是的,我希望两个索引中只有一个实际上是在内部维护的。但这并不重要,因为你不应该这样做。

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

答案 2 :(得分:2)

MySQL允许您创建冗余索引并保留所有索引。

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

答案 3 :(得分:1)

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

这是开发人员或DBA的工作,而不是索引重复或冗余,应该删除。

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