我在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分钟以上,查询也没有返回任何内容。
很遗憾,我无权查看估算的查询计划。我需要更改什么才能使查询返回得更快?
答案 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,因为它们在连接中使用。