Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何使这个繁重的SQL查询变得更轻松?_Mysql - Fatal编程技术网

Mysql 如何使这个繁重的SQL查询变得更轻松?

Mysql 如何使这个繁重的SQL查询变得更轻松?,mysql,Mysql,有时,我使用此sql查询从posts表中删除重复的POST。 但它需要很长时间才能完成,让我的域名无法访问大约5分钟。 看起来这对服务器来说是一个沉重的sql,有没有办法让它更轻更快 DELETE FROM hotaru_posts WHERE post_id NOT IN ( SELECT a.post_id FROM ( SELECT post_title, post_id FROM hotaru_posts GROUP BY post_title ) a ) 这方面的最佳和最快查询是 d

有时,我使用此sql查询从posts表中删除重复的POST。 但它需要很长时间才能完成,让我的域名无法访问大约5分钟。 看起来这对服务器来说是一个沉重的sql,有没有办法让它更轻更快

DELETE FROM hotaru_posts WHERE post_id NOT IN ( SELECT a.post_id FROM ( SELECT post_title, post_id FROM hotaru_posts GROUP BY post_title ) a )

这方面的最佳和最快查询是

delete from hotaru_posts where post_id in (
  select post_id from (
    select post_id from hotaru_posts a group by post_title having count(post_title) > 1
  ) b
)
这个查询只花了0.0603秒。虽然第一次查询花费了5分钟以上。lol

这行吗

DELETE FROM hotaru_posts
WHERE post_id IN (
    SELECT post_id
    FROM (
        SELECT MAX(post_id)
        FROM hotaru_posts a
        GROUP BY post_title
        HAVING COUNT(post_title) > 1
    ) b
)

这方面的最佳和最快查询是

delete from hotaru_posts where post_id in (
  select post_id from (
    select post_id from hotaru_posts a group by post_title having count(post_title) > 1
  ) b
)

这个查询只花了0.0603秒。虽然第一次查询耗时超过5分钟。lol

当前查询是否有效?它不应该是这样的:您正在按帖子标题在一个组中选择一个未聚合的帖子id,这是不正确的。@DasbLinkedLight:是的,但是,在这种情况下,IIRC,MySQL只会从该组中选择一个未确定的值。@SergioTulentsev换句话说,该语句删除随机重复的内容:好吧,我在stack@dasblinkenlight上得到了这个查询:更具体地说,它从一篇文章的所有副本中删除除一篇以外的所有内容。哪一个职位能幸存下来取决于命运:这会起作用吗??你告诉我,我害怕测试,因为这是我的直播网站。@LucasMatos:复制并测试。没有数据副本是baaad的问题。从hotaru_帖子中创建表testTable作为SELECT*-这将复制您的表并将其命名为“testTable”。尝试在该表上运行此查询。它确实包含一个较少的SELECT,如果它按我认为的方式工作,新的SELECT将只检索重复项,而不是所有非重复项。所以,是的,我认为它会更快。@Travesty3:Error 1093-您不能在FROM子句DELETE FROM testTable中为更新指定目标表“testTable”,其中post\u id在按COUNT post\u title>1的post\u title从testTable组中选择MAX post\u id