查询速度非常慢,还有其他方法可以通过更好的性能来格式化吗

时间:2012-06-06 20:35:19

标签: mysql sql

我有这个查询(我没写过),对于一个客户端工作正常,直到该表中有超过几千行,现在只需要4200行就需要40秒+。

有关如何优化和获得相同结果的任何建议吗?

我尝试过其他一些方法,但没有得到这个较慢的查询返回的正确结果......

SELECT COUNT(*) AS num
  FROM `fl_events`
  WHERE id IN(
    SELECT DISTINCT (e2.id)
      FROM `fl_events` AS e1, fl_events AS e2
      WHERE e1.startdate >= now() AND e1.startdate = e2.startdate
  )
  ORDER BY `startdate`

任何帮助都会受到很大关注!

3 个答案:

答案 0 :(得分:5)

来自明显索引的公寓,我真的不明白你为什么选择IN条件加入你的桌子。 ORDER BY也不需要。你确定你的查询不能这样写吗?:

SELECT COUNT(*) AS num
FROM `fl_events` AS e1
WHERE e1.startdate >= now() 

答案 1 :(得分:0)

我不认为重写查询会有所帮助。你的问题的关键是“直到桌子上有超过几千行。”这意味着不对重要列进行索引。在一定数量的记录之前,所有数据都适合单个内存块 - 在这一点上,需要一个新的块。索引是加速搜索的唯一方法。

首先 - 检查fl_events中的ID是否实际标记为主键。这实际上是对记录进行排序,如果没有它,您可以看到数据损坏,偶尔会出现超慢的结果。在查询中使用distinct使它看起来可能不是唯一值。这会造成问题。

然后,确保在start_date上添加索引。

答案 2 :(得分:0)

缓慢可能与事件表与其自身的连接有关,并且可能是startdate没有索引。