【发布时间】:2011-11-07 20:39:29
【问题描述】:
我们从 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)并运行第二个查询,结果会立即返回。
有什么建议吗?
【问题讨论】:
-
更新前相同的查询是如何执行的?我会检查执行计划并重建受影响的索引以防万一。
-
您需要查看执行计划。看起来你不是架构限定你的对象(例如
dbo.PurchaseOrder所以我认为这可以解释为什么不同的用户得到不同的计划) -
不知道是否有帮助注意连接表之一使用 sysusers 和 sysmembers 系统表 uid 列,因为我们在整个数据库中使用 SQL Server 内置安全性
标签: sql-server-2008 sql-server-2000 performance