sql-server - SQL Case语句 VS Union All 性能

标签 sql-server tsql

我有一个查询需要合并条件逻辑。需要考虑 4 种情况,并且结果集是不相交的。

我可以使用单个 SELECTCASE/WHEN 语句或使用多个 SELECT 来实现查询语句和UNION ALL

一般来说,其中一种实现可能比另一种更快吗?如果是这样,为什么?

最佳答案

Union 会同时进行许多选择,因此如果 from 语句不是那么复杂并且所有其他条件都相同,恕我直言,这种情况通常会更好。但它们不是相似的 sql 结果:

“Case when ...”将添加另一个水平行,并且默认情况下,选择的并集必须在被并集的集合中具有一定数量的列,以便它将添加更多行。例如,如果您查询三个单独的表,然后将它们合并在一起,那么您将执行三个选择,但是如果您只执行三种情况,那么如果您查询一张表,那么会很有效。但您可能会查询五个。在不知道来源的情况下,答案实际上是:“这取决于”。

我只是在对SQL引擎进行快速计时时设置了ole“setstatisticstimeon”来查看。人们可以争论语义,但当引擎告诉你发生了什么时,它不会撒谎。我相信 SQL 2005 及更高版本的菜单栏中也有“包括实际执行计划”。这是一个看起来很漂亮的 L 形状的三个正方形小图标,L 点位于左上角。如果您有一些非常复杂的东西并且正在真正进行微调,那么可以选择使用该工具来检查引擎在查询中的幕后行为。

关于sql-server - SQL Case语句 VS Union All 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15283541/

相关文章:

sql - 如何在按计数排序的sql表中获取10个中级用户

sql - TCP 提供程序 : The specified network name is no longer available

sql - 为什么 SET XACT_ABORT ON 不是默认行为?

SQL Server : copy data from one column to another column?

SQL Server 正在尝试使用两个路径作为备份位置

tsql - 如何创建一个 SQL 函数来返回一个 BIT?

sql-server - 如何将输出参数传递给存储过程?

sql-server - Sql 按年份范围分组

sql - 如何在 T-SQL 中优化多表排序的联接?

sql-server - 从完整路径解析文件名和路径