Ory*_*ryx 2 sql sql-server database-administration
我有一个非常简单的查询,这让我绝对疯狂.
情况如下:
我已经尝试在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
Run Code Online (Sandbox Code Playgroud)
因此,返回所有ProjMgrs的不同列表,如果TeamMember在该列表上,则为OnProjAsMgr值指定"Yes".
我是一个完整的SQL新手,这是由前任编写的代码.我不知道是否有更好的方法来编写它,但我无法弄清楚为什么它在SQL Server 2000上运行得很好但在SQL Server 2005上完全崩溃.
DISTINCT导致排序,IN导致整个查询被评估.这个版本是如何工作的:
SELECT OnProjAsMgr = CASE WHEN EXISTS
(SELECT 1 FROM dbo.ProjMgr WHERE ProjMgrID = TeamMember.ID)
THEN 'Yes'
ELSE 'No'
END
FROM dbo.TeamMember;
Run Code Online (Sandbox Code Playgroud)
如果这不是更好,那么我怀疑索引丢失,如果没有它们,任何查询都无法正常运行.