2

次の構造のスクリプトがあります。

SELECT SUM(CASE WHEN pf.info IS NOT NULL THEN 1 ELSE 0 END)
FROM summary s 
LEFT JOIN (SELECT id, info FROM items GROUP BY id) pf ON s.id=pf.id
GROUP BY s.date

私が欲しいのは、「概要」にあり、「アイテム」にあるIDを数えることです。「アイテム」には同じIDが数回繰り返されているため、GROUP BYを実行します。

このスクリプトは思い通りに動作しますが、非常に遅く、単純な LEFT JOIN を実行する (そして各 ID を数回カウントする) よりもはるかに遅くなります。私はそれよりも小さな部分空間が必要であり、それはより簡単なはずなので、これは意味がないようです。

問題は、クエリを再構築して高速化するにはどうすればよいかということです。

4

1 に答える 1

3

使用count(distinct ...)

SELECT count(distinct s.id)
FROM summary s 
JOIN items i ON s.id = i.id


なぜあなたがグループ化するのかわかりませんs.date-理由についてのあなたの質問には手がかりがないので、それが間違いではなく、あなたがグループ化する必要がある場合はdate、これを使用してください:

SELECT s.date, count(distinct s.id)
FROM summary s 
JOIN items i ON s.id = i.id
GROUP BY s.date
于 2012-09-21T02:08:16.133 に答える