SQL COUNT(*)返回时间太长

时间:2017-02-05 01:29:20

标签: sql-server

我在SQL Server 2012中工作。我有以下查询:

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 个答案:

答案 0 :(得分: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

我在WHERE子句中注释掉了IS NOT NULL部分b / c它们永远不会为NULL,因为它们在连接中使用。