SQL Case语句VS Union所有性能

时间:2013-03-07 23:03:14

标签: sql-server tsql

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

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

一般来说,这些实现中的一个可能比另一个快吗?如果是这样,为什么?

2 个答案:

答案 0 :(得分:1)

如果from语句不是那么复杂且所有其他事情都是平等的,那么联盟会做很多选择,所以一般情况下会更好。但它们不是类似的SQL结果:

'Case when ...'将添加另一个水平行,默认情况下,select的并集必须具有联合的集合中的列数,因此它将添加更多行。例如,如果您查询了三个单独的表,然后将它们联合在一起,那么您正在进行三次选择,但是如果您只执行三个案例,那么如果您查询一个表,则会有效。但你可能会查询五个。在不知道来源的情况下,答案确实是:'这取决于'。

我只是在快速计时SQL引擎时将ole'set statistics time设置为'。人们可以争论语义,但是当它告诉你发生了什么时,引擎就不会说谎。 SQL 2005及更高版本我相信在菜单栏中也有“包含实际执行计划”。这是一个漂亮的小三角形图标,呈L形,L点位于左上角。如果你有一些非常复杂的东西,并且正在进行微调,那么首选工具就是用你的查询来检查引擎在做什么。

答案 1 :(得分:0)

这实际上完全取决于您期望从中选择的逻辑和数据。如果你正在对大型数据集运行这个SELECT,并且逻辑非常简单,就像在A和B之间的那样,那么你可能会得到一点提升,将逻辑放在你的where子句中并做一个UNION ALL但不是一大堆差异。在相对较小的数据集上,它可能根本没有任何区别。它也可能取决于您是否认为此代码是一成不变的,或者是否需要定期更改。 UNION ALL肯定会有更多的代码行,因为你基本上用不同的WHERE子句反复编写相同的查询,但它也可能更容易阅读和维护。