这是一个非常简单的查询。
如果我单独运行查询它并不慢,但是当我将它们组合起来时它非常慢。
我不确定如何优化它。我基本上只想要多次退款。所以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);
解释的结果已作为图像附加
答案 0 :(得分:2)
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 )
答案 1 :(得分:1)
我认为你的查询没有回答这个问题。据我所知,你应该首先获得具有多个关联id的所有faultid(表中的行)。然后获取所有这些行(不仅仅是faultId)。
试试这个:
select * from faultrefunds_v2
where faultId in (
select faultId from faultrefunds_v2
group by faultId
having count(*) > 1
)
答案 2 :(得分:1)
我想,这有点像重写而不是优化,但无论如何我会尝试这样做:
SELECT
r.*
FROM faultrefunds_v2 r
WHERE EXISTS (
SELECT *
FROM faultrefunds_v2 r1
WHERE r1.faultid = r.faultid
AND r1.id <> r.id
);