MySQL QUERY准备时间太长了

时间:2013-04-19 16:43:07

标签: mysql

以下SQL的准备时间为30秒以上。 SQL是错误的,还是我有近百万的结果导致数据库?这个SQL可以优化,而不是让它准备那么久吗?

UPDATE url_source_wp SET hash="ASDF2"
WHERE (url_source_wp.id NOT IN (
   SELECT url_done_wp.url_source_wp FROM url_done_wp WHERE url_done_wp.url_group = 4)
)
AND (hash IS NULL) LIMIT 50

2 个答案:

答案 0 :(得分:0)

如果准备工作是您的问题,您可以预先将其编译为存储过程。

请参阅:http://dev.mysql.com/doc/refman/5.0/en/stored-routines.html

答案 1 :(得分:0)

似乎您可以更好地在JOIN中执行此更新,从而避免使用子选择。

UPDATE
  url_source_wp AS s
  INNER JOIN url_done_wp AS d
    ON s.id = d.url_source_wp
SET
  s.hash = 'ASDF2'
WHERE
  s.hash IS NULL
  AND d.url_group = 4

您需要确保在s.idd.url_source_wps.hashd.url_group上有索引。另请注意,您不能将LIMIT与多表语法结合使用,因此如果这很重要,则此建议可能对您不起作用。