2017-04-14 10 views
0

を組み合わせるには、カウントを取得するには、次のクエリを考えてみましょう。赤方偏移は、2つのクエリ

クエリB句が若干異なっているだけで、同じテーブルの上にも その、彼らはSOURCE_ID & SOURCE_TYPE:

SELECT 
    COUNT(*) 
FROM 
    "user_notifications" 
WHERE 
    "user_notifications"."source_id" = 5196 
    AND "user_notifications"."source_type" = 'MassGifting' 
    AND (
     "user_notifications"."read_at" IS NOT NULL 
    ) 
をもとに読まれている場合は、その状況に基づいて、通知の音をチェックしよう

実行の詳細: enter image description here 実行時間:5-6秒。合計では、これらの2つのクエリを実行するのに約30-60秒かかります&私たちのウェブサイト上でレポートをレンダリングします。

これをスピードアップできる方法は何ですか?

+1

user_notificationsテーブルにはどのくらいのデータがありますか?ソートキーやディストリビューションキーはありますか?条件でソートキーがなければ、スピードアップが非常に難しいです。 –

答えて

0

以下のクエリを試してみて、どれくらい時間がかかるか教えてください。
これは、両方のクエリの結果を1回のテーブルスキャンで取得する必要があります。私が悪いの仮定を行った場合

SELECT 
    SUM(case when   
    "user_notifications"."status" = 'sent' 
    AND "user_notifications"."read_at" IS NULL 
    then 1 else 0 end) as Result1, 
    SUM(case when   
    "user_notifications"."read_at" IS NOT NULL 
    then 1 else 0 end) as Result2, 
FROM 
    "user_notifications" 
WHERE 
    "user_notifications"."source_id" = 5196 
    AND "user_notifications"."source_type" = 'MassGifting' 

コメントと私は私の答えを再フォーカスますしてください。

関連する問題