MySQL:在具有现有记录的表上添加索引

时间:2012-08-12 20:14:09

标签: mysql sql

我的查询运行速度非常慢。该表是查询具有大约100k记录,并且在where子句中使用的大多数列上没有索引。我刚刚在这些列上添加了索引,但查询没有更快。

我认为这是因为当列被索引时,它的值会在插入时写入索引中。我刚刚在添加了所有这些记录之后添加了索引。那么有没有办法在桌面上“重新运行索引”?

修改

以下是查询和解释结果:

enter image description here

奇怪的是,当我复制查询并直接在我的SQL管理器工具中运行时,它运行得非常快,所以问题就在于我的应用程序代码而不是查询本身。

2 个答案:

答案 0 :(得分:2)

Mysql保持一致的索引。如果首先添加数据,首先添加索引,或者随时更改数据,则无关紧要。将产生相同的最终索引(假设相同的最终数据和索引类型)。

您的慢查询不是由以后添加索引引起的。还有其他一些原因。

答案 1 :(得分:1)

这是一个非常常见的问题。

使用MySQL解释http://dev.mysql.com/doc/refman/5.0/en/using-explain.html

当您在SELECT语句之前使用关键字EXPLAIN时,MySQL会显示优化程序中有关查询执行计划的信息。也就是说,MySQL解释了它将如何处理语句,包括有关表如何连接以及以何种顺序的信息。

使用这些结果...验证您创建的索引是否按预期方式运行。

如果没有,您将需要调整索引,直到它按预期工作。

您可能想要创建一个新表,创建索引,然后在测试时将旧表中的所有元素插入到新表中。它比丢弃和重新添加指数一百万次更容易。