我在 SQL Server 2008 中运行的查询遇到了一些性能问题。我有以下查询:
查询1:
SELECT GroupID, COUNT(*) AS TotalRows FROM Table1
INNER JOIN (
SELECT Column1 FROM Table2 WHERE GroupID = @GroupID
) AS Table2
ON Table2.Column1 = Table1.Column1
WHERE CONTAINS(Table1.*, @Word) GROUP BY GroupID
表 1 包含大约 500,000 行。Table2 包含大约 50,000 个,但最终将包含数百万个。玩弄查询,我发现按如下方式重写查询会将查询的执行时间减少到 1 秒以下。
查询 2:
SELECT GroupID FROM Table1
INNER JOIN (
SELECT Column1 FROM Table2 WHERE GroupID = @GroupID
) AS Table2 ON Table2.Column1 = Table1.Column1
WHERE CONTAINS(Table1.*, @Word)
我不明白的是这是一个简单的计数查询。如果我对表 1 执行以下查询,它会在 < 1 秒内返回:
查询 3:
SELECT Count(*) FROM Table1
此查询返回大约 500,000 作为结果。
但是,上面提到的原始查询(查询 1)仅返回 50,000 的计数并且执行需要 3 秒,即使简单地删除 GROUP BY(查询 2)将执行时间减少到 < 1 秒。
我不认为这是一个索引问题,因为我已经在相应的列上有了索引。任何帮助将不胜感激。