【发布时间】:2014-04-25 04:23:37
【问题描述】:
如果我有一个主键为 subject_id (INT) 和 category_id (INT) 的 SQL Server 2008 R2 数据库表和一个位掩码列(是的,恐怖位掩码!,但它就是这样,位掩码不会吓到我,以及为清楚起见已省略的其他列)...
鉴于以下两个查询,哪个更有效?我尝试使用客户端统计信息和执行计划输出,但每次运行查询时统计信息似乎都不同,并且本身并没有明确的赢家。
查询 1:
SELECT SUM( CASE WHEN ( category_id = 1 AND ( bit_mask & 4 ) = 4 ) THEN 1
WHEN ( category_id = 2 AND ( bit_mask & 8 ) = 8 ) THEN 1
ELSE 0 END )
FROM data_tbl
WHERE subject_id = 12;
查询 2:
SELECT COUNT(*)
FROM data_tbl
WHERE subject_id = 12
AND 1 = ( CASE WHEN ( category_id = 1 AND ( bit_mask & 4 ) = 4 ) THEN 1
WHEN ( category_id = 2 AND ( bit_mask & 8 ) = 8 ) THEN 1
ELSE 0 END );
如果某些 SQL 专家可以查看并立即判断哪个查询更有效(或者它们是否相同?),请告诉我。
提前致谢!
【问题讨论】:
-
您为什么不自己在 Mgmt Studio 中运行这两个查询并进行比较!您可以使用实际的执行计划和执行统计信息来查看两者的性能对比......
-
我做到了,但正如我在原帖中提到的,统计数据似乎每次都不同(没有明确的赢家);可能是我在运行测试之前做错了什么。
标签: sql-server sql-server-2008-r2 count sum case