SQL Server 2008上的Windows服务器企业(?)上运行的2008年版的SQL Server ORDER BY性能像差
我有一个查询加入对20的一些奇表(主要是左外连接)。未筛选查询返回的完整数据集在少于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
在我的开发/测试服务器tempdb数据库400MB大,有400MB的空间可用。在恢复下我看到页面验证选项设置为CHECKSUM。我确保日志文件被截断并重新运行测试,结果没有任何变化。 我也尝试将查询的主体移到VIEW中,并在该视图上执行SELECT和ORDER。这产生了相同的结果。 – 2010-10-05 14:15:03