我的查询运行速度非常慢。该表是查询具有大约100k记录,并且在where子句中使用的大多数列上没有索引。我刚刚在这些列上添加了索引,但查询没有更快。
我认为这是因为当列被索引时,它的值会在插入时写入索引中。我刚刚在添加了所有这些记录之后添加了索引。那么有没有办法在桌面上“重新运行索引”?
以下是查询和解释结果:
奇怪的是,当我复制查询并直接在我的SQL管理器工具中运行时,它运行得非常快,所以问题就在于我的应用程序代码而不是查询本身。
答案 0 :(得分:2)
Mysql保持一致的索引。如果首先添加数据,首先添加索引,或者随时更改数据,则无关紧要。将产生相同的最终索引(假设相同的最终数据和索引类型)。
您的慢查询不是由以后添加索引引起的。还有其他一些原因。
答案 1 :(得分:1)
这是一个非常常见的问题。
使用MySQL解释http://dev.mysql.com/doc/refman/5.0/en/using-explain.html
当您在SELECT语句之前使用关键字EXPLAIN时,MySQL会显示优化程序中有关查询执行计划的信息。也就是说,MySQL解释了它将如何处理语句,包括有关表如何连接以及以何种顺序的信息。
使用这些结果...验证您创建的索引是否按预期方式运行。
如果没有,您将需要调整索引,直到它按预期工作。
您可能想要创建一个新表,创建索引,然后在测试时将旧表中的所有元素插入到新表中。它比丢弃和重新添加指数一百万次更容易。