我有一个查询需要合并条件逻辑。需要考虑 4 种情况,并且结果集是不相交的。
我可以使用单个 SELECT
和 CASE
/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/