【发布时间】:2010-10-04 21:42:23
【问题描述】:
在 Windows Server Enterprise(?) Edition 2008 上运行的 SQL Server 2008
我有一个查询加入了 20 个奇怪的表(主要是 LEFT OUTER JOIN)。未过滤查询返回的完整数据集在不到 1 秒的时间内返回不到 1,000 行。当我应用 WHERE 子句过滤查询时,它会在不到 1 秒的时间内返回不到 300 行。
当我对查询应用 ORDER BY 子句时,它会在 90 秒内返回。
我检查了查询的结果,并注意到在用于排序的列中返回了许多 NULL 结果。我将查询修改为 COALESCE 一个 NULL 值到一个有效的搜索值,而对查询的性能没有任何改变。
然后我做了一个
SELECT * FROM
(
my query goes here
) qry
ORDER BY myOrderByHere
这产生了相同的结果。
当我 SELECT ... INTO #tempTable(没有 ORDER BY)然后从 #tempTable 中选择时,查询返回的顺序不到 1 秒。
此时真正奇怪的是,即使没有 ORDER BY,SELECT... INTO 也会花费 90 秒。
执行计划表明,当包含在主查询中时,SORT 占用了 98% 的执行时间。如果我正在执行 INSERT INTO,则说明计划表明实际插入临时表需要 99% 的执行时间。
为了解决服务器问题,我在 SQL Server 2008 的两个不同实例上运行了相同的测试,结果几乎相同。
非常感谢!
rjsjr
【问题讨论】: