Sql server SQL Server按性能排序

Sql server SQL Server按性能排序,sql-server,performance,Sql Server,Performance,在Windows Server Enterprise Edition 2008上运行的SQL Server 2008 我有一个针对20多个奇数表的查询连接,这些表大部分是左外部连接。未筛选查询返回的完整数据集在不到1秒内返回的行数少于1000行。当我应用WHERE子句来过滤查询时,它在不到1秒内返回不到300行 当我对查询应用ORDERBY子句时,它会在90秒内返回 我检查了查询的结果,注意到用于排序的列中返回了许多空结果。我修改了查询,将空值合并为有效的搜索值,而不改变查询的性能 然后我做了一

在Windows Server Enterprise Edition 2008上运行的SQL Server 2008

我有一个针对20多个奇数表的查询连接,这些表大部分是左外部连接。未筛选查询返回的完整数据集在不到1秒内返回的行数少于1000行。当我应用WHERE子句来过滤查询时,它在不到1秒内返回不到300行

当我对查询应用ORDERBY子句时,它会在90秒内返回

我检查了查询的结果,注意到用于排序的列中返回了许多空结果。我修改了查询,将空值合并为有效的搜索值,而不改变查询的性能

然后我做了一个测试

SELECT * FROM
(
my query goes here
) qry
ORDER BY myOrderByHere
这也产生了同样的结果

当我选择。。。进入不带订单的可诱惑项,然后从带有订单的可诱惑项中选择,查询在不到1s的时间内返回

在这一点上真正奇怪的是选择。。。进入也将采取90年代,即使没有命令由

执行计划表明,当包含在主查询中时,排序占用了98%的执行时间。如果我在执行对临时表的插入,解释计划会说对临时表的实际插入占用99%的执行时间

为了解决服务器问题,我在SQLServer2008的两个不同实例上运行了相同的测试,结果几乎相同

非常感谢


rjsjr

在查询中,排序操作通常是一个昂贵的步骤。因此,增加排序会增加时间也就不足为奇了。在步骤中加入临时表时,您可能会看到类似的结果。原始查询中的排序操作可能使用tempdb来帮助进行排序,而这可能是比较每个查询时耗时的步骤


如果您想了解有关正在运行的每个查询的更多信息,可以查看查询计划输出。

听起来您的tempdb有点奇怪。在临时表中插入1000行应该很快,无论是用于排序的隐式假脱机还是显式select into


检查tempdb的大小、它所在硬盘的运行状况,以及它的恢复模式应简单、不完整或批量记录。

在我的开发/测试服务器上,tempdb大400MB,有400MB可用空间。在恢复下,我看到页面验证选项设置为校验和。我确保日志文件被截断,并在结果没有变化的情况下重新运行测试。我还尝试将查询的主体移动到一个视图中,并在该视图上执行SELECT和ORDER。这会产生同样的结果。