我有一个非常简单的查询,这让我非常抓狂。
情况如下:
- 我有两个数据库服务器。
- 一种是旧的 SQL Server 2000 (VM),资源非常少。
- 另一个是一个非常大的 SQL Server 2005 企业集群,拥有绝对荒谬的可用资源。
- 我有一小部分在 3 秒内执行并在 SQL Server 2000 上返回 50,000 多行数据的较大查询
- 在 SQL Server 2005 上,同样的小查询需要 15 分钟以上才能返回 1000 行
- 我正在使用的数据库是这两台服务器上的镜像。相同的表,相同的表中的数据,相同的表索引等。
我尝试在 SQL Server 2005 表上创建不同的索引,对所有存在的索引进行碎片整理,更新表统计信息等。没有什么能让这个查询在 SQL Server 2005 上运行得更快。目前没有针对 SQL 运行其他任何东西Server 2005 服务器,我们的 DBA 向我保证,这不是配置问题或与 SQL Server 2000 和 SQL Server 2005 之间的功能弃用有关。
查询如下:
SELECT (CASE
WHEN TeamMember.ID IN (SELECT DISTINCT ProjMgrID FROM ProjMgr)
THEN 'Yes'
ELSE 'No'
END) AS OnProjAsMgr
FROM TeamMember
因此,返回所有 ProjMgrs 的不同列表,如果 TeamMember 在该列表中,则将“是”分配给 OnProjAsMgr 值。
我是一个 SQL 新手,这是前任编写的代码。我不知道是否有更好的编写方法,但我不明白为什么它在 SQL Server 2000 上运行良好,但在 SQL Server 2005 上完全崩溃。