【发布时间】:2009-11-25 07:17:52
【问题描述】:
我在 A、B 和 C 列上有单独的索引。我想在 A+B+C 三个列上创建一个复合索引。
我的现有索引会对复合索引创建产生什么影响?数据库会利用它们吗?它们是否无关紧要,或者它们会减慢我的新复合索引的创建速度?
我正在使用 MySql 5.1。
编辑:顺便说一句,该表有几百万行。
编辑 2:感谢 tster 的建议:我在一个小得多的表(诚然只有 20,000 行)上进行了尝试,但即便如此,当个别索引已经存在。
【问题讨论】:
-
iirc,MySQL 只使用一个索引。我会自己创建覆盖/复合索引,并摆脱单个索引
-
@OMGPonies:感谢您的评论。你会先放弃个别的,还是没关系?
-
为什么不在那里创建带有三个索引的索引并计时,然后在没有索引的情况下执行相同的操作,看看是否更快。我的猜测是没有区别,因为扫描三个索引然后将它们合并在一起可能比扫描整个关系更昂贵。
-
我发现那里的单个索引花费了更长的时间,这令人惊讶。我非常想知道为什么会这样。
-
“几百万行”听起来并不多,您可能可以在 30 分钟内重建表(取决于您的确切数据)。困难的是创建索引需要几个小时。如果表适合 ram,则创建索引相对较快。您的服务器应该有足够的内存来容纳“几百万行”的表