作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个非常简单的查询,它让我非常抓狂。
情况是这样的:
我已经尝试在 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 在该列表中,则将"is"分配给 OnProjAsMgr 值。
我是一个彻头彻尾的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;
如果情况没有好转,那么我怀疑缺少索引,没有它们,任何查询都无法正常执行。
关于SQL CASE WHEN <Value> IN 在 SQL Server 2005 上运行缓慢,但在 2000 上运行缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12377461/
我是一名优秀的程序员,十分优秀!