2017-02-05 6 views
0

を返すために時間がかかりすぎる私は、SQL Server 2012で働いています、私は次のクエリを持っている:SQLのCOUNT(*)

SELECT 
    COUNT(*), a.col3 
FROM 
    a 
INNER JOIN 
    (SELECT 
     d.x, c.col6 
    FROM 
     c 
    INNER JOIN 
     d ON d.x = c.col2 
    WHERE 
     c.col15 = 20 
     AND c.col4 IN ('something', 'more') 
    ) AS b ON b.x = a.col3 
      AND b.col6 = a.col2 
WHERE 
    a.col10 = 20 
    AND a.col2 IS NOT NULL 
    AND a.col3 IS NOT NULL 
GROUP BY 
    a.col3 

テーブルが小さいです。 aとcは約100k行です。 dは約100行です。

ただし、クエリは45分以上経過しても何も返されません。

残念ながら、推定クエリプランを表示する権限がありません。クエリをより迅速に返すためには、何を変更する必要がありますか?

+1

クエリプランにアクセスするために必要なものを変更する必要があります。パフォーマンスの問題でランダムに刺すのはちょっとばかりです。 – thebjorn

+1

不正なクエリプランのほかに、考えられる別の原因がブロックされています。 –

+0

'a'と' c'テーブルにインデックスがありますか? –

答えて

0

おそらく、外部クエリの各行に対して発生するサブクエリです。あなたは、サブクエリなしでそれを書き換えることができます。

SELECT 
    COUNT(*), a.col3 
FROM 
    a 
INNER JOIN 
    c ON c.col6 = a.col2 
INNER JOIN 
    d ON d.x = c.col2 
     AND d.x = a.col3 
WHERE 
    a.col10 = 20 
    --AND a.col2 IS NOT NULL 
    --AND a.col3 IS NOT NULL 
    AND c.col15 = 20 
    AND c.col4 IN ('something', 'more') 
GROUP BY 
    a.col3 

それらが結合に使用されているので、彼らはNULLになることはありませんC/B WHERE句でNULLの部分ではありませんから、私はコメントしています。