首页 > 解决方案 > MySQL 查询停滞 - 这个 MySQL 查询是否有更有效的解决方案?

问题描述

SELECT post_title, 
       count(*) AS c
FROM wp_posts
WHERE post_type = "product"
GROUP BY post_title
HAVING c > 1
ORDER BY c DESC

运行没问题,在 < 1 秒内返回结果。然而

select * from wp_posts where post_title in (
    select post_title from wp_posts WHERE post_type = "product"
    group by post_title having count(*) > 1
)

挂了。

然而,它们基本上是相同的查询,除了在第二个查询中我试图提取整个记录而不仅仅是post_title.

我错了吗?有没有更有效的方法来实现等效?

编辑:EXPLAIN查询并SHOW CREATE TABLE wp_posts已附加以供您参考。 在此处输入图像描述

在此处输入图像描述

标签: mysqlsql

解决方案


您可以避免子查询上的 IN 子句并使用内部联接

select a.* 
from wp_posts a
INNER JOIN (
    select post_title 
    from wp_posts 
    WHERE post_type = "product"
    group by post_title 
    having count(*) > 1
) t ON t.post_title = a.post_title

这应该更高效


推荐阅读