2017-04-02 2 views
0

私は、より多くのコメントを含む投稿を選択するために、postgresにクエリを書いています。PostgreSQLで複数のクエリのパフォーマンスを測定する

次のように動作しますが、多くの投稿でパフォーマンスの問題になるかどうかは疑問です。

クエリ

SELECT 
    po.*, 
    (SELECT count(id) FROM comments WHERE post_id = po.id) AS comments_count 
    FROM posts AS po 
    ORDER BY comments_count DESC 
    LIMIT 10; 

結果

id title body comments_count 
2 Foo Bar 5 
1 Click Bait 4 

は、私はこのクエリのパフォーマンスを向上させるために行うことができますか、それは大丈夫です何かはありますか?

答えて

1

相関サブクエリの代わりにjoinを使用できます。 idはポストテーブルのPKであると仮定すると:2番目の例では

select p.*, 
    count(c.id) as comments_count 
from posts p join comments c on p.id = c.post_id 
group by p.id 
order by comments_count desc limit 10; 

または

select p.*, 
    c.comments_count 
from posts p 
join (
    select post_id, 
     count(id) as comments_count 
    from comments 
    order by comments_count desc LIMIT 10 
    ) c on p.id = c.post_id; 
+0

私はこのエラーを取得: – pietrovismara

+0

@pietrovismaraをinteger'型、boolean型であってはならないことをWHEREの '引数を - それはタイプミスでした。答えを更新しました。今すぐお試しください – GurV

+0

とにかく、あなたの最初のクエリと私のための 'EXPLAIN'結果を比較すると、あなたの方がはるかに良く見えます。なぜなら、参加を使用するのは、すべてではなく、一致するコメントでのみ行われるからです。 – pietrovismara

関連する問題