mysql - 在Mysql中通过子查询优化分组

标签 mysql performance group-by subquery

这是一个非常直接的查询。

如果我单独运行查询,它并没有那么慢,但是当我将它们组合起来时,它非常慢。

我不确定如何优化它。我基本上只想显示多次退款。所以 where faultid 存在不止一次。

SELECT 
    r.* 
FROM 
    faultrefunds_v2 r
WHERE 
    r.id IN (SELECT r1.id 
             FROM faultrefunds_v2 r1 
             GROUP BY faultid
             HAVING count(r1.faultid) > 1);

解释的结果已作为图像附加

enter image description here

最佳答案

IN 子句的使用方式会很慢,请改用 JOIN:

SELECT r.* FROM ( 
  SELECT r1.id AS id
  FROM faultrefunds_v2 r1 
  GROUP BY faultid
  HAVING count(r1.faultid) > 1
) AS ids
LEFT JOIN faultrefunds_v2 AS r
ON( ids.id = r.id )

关于mysql - 在Mysql中通过子查询优化分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9965766/

相关文章:

java - 在 Java 中声明方法参数 final 是否有任何性能原因?

java - Java String.split 的替代方案以获得更好的性能

mysql - 如何在 SQL 中按最大日期分组(Order By a Group By)

postgresql - 在 postgres 中合并行

c# - 类型描述符性能

MySQL 排序分组依据结果

php - 使用 php 和 wordpress 创建选择控件

php - 从 mysql 在 php 中显示图像

mysql - 为什么我的 SQL LEFT JOIN 查询不工作?

mysql - 使用 HAVING COUNT 的 SQL 子查询