我们从SQL Server 2000迁移到2008,当我们使用UNION运算符时,某些用户(在某些数据库角色中)的查询运行速度非常慢。我用UNION ALL
尝试了查询如下所示
SELECT 'PONumber'= '','POId'=''
UNION
SELECT DISTINCT
'PONumber'=PONumber,
'POId'=RTRIM(CONVERT(varchar(32),po.POId) )
FROM PurchaseOrder po JOIN ... JOIN ..... JOIN ...................
如果我只删除第一部分(和UNION)并运行第二个查询,则会立即返回结果。
有什么建议吗?
答案 0 :(得分:0)
我不知道它在SQL 2000中会有什么反应,但是当合并两个查询的结果时,使用UNION
而不是UNION ALL
将导致排序操作(获取摆脱重复)。这可能是一个大量的处理,具体取决于结果集的大小。
此外,SQL 2000和SQL 2008之间的tempdb使用率变化非常大。排序操作很可能使用tempdb,因此您应检查tempdb的介质并确保它有足够的空间等。