我有一个查询需要合并条件逻辑。有4种情况需要考虑,并且结果集是不相交的。
我可以使用单个SELECT和CASE/WHEN语句,也可以使用多个SELECT语句和UNION ALL来实现查询。
一般来说,这些实现中的一个可能比另一个更快吗?如果有,原因何在?
发布于 2013-03-08 07:55:37
一个Union将许多selects放在一起做,所以如果from语句不是那么复杂,并且所有其他条件都是相等的,那么case通常会更好。但它们不是相似的sql结果:
一个“案例,当……”将添加另一个水平行,默认情况下,select的联合必须使集合中的列数达到联合的数量,以便添加更多行。例如,如果您查询了三个单独的表,然后将它们合并在一起,那么您将执行三个selects操作,但是如果您只执行三个case操作,那么如果您只查询一个表,那么效率将会很高。但您可能会查询五个。在不知道来源的情况下,答案实际上是:“这取决于”。
我只是在对SQL引擎进行快速计时时设置了ole 'set statistics time on‘来查看。人们可以争论语义,但当引擎告诉你发生了什么时,它不会说谎。我相信SQL2005和更高版本的菜单栏中也有“包含实际执行计划”。这是一个漂亮的三个小正方形图标,形状为L,L点在左上角。如果你有一些非常复杂的东西,并且正在进行微调,这是检查引擎在幕后对你的查询做了什么的首选工具。
发布于 2017-03-09 01:14:34
这实际上完全取决于您期望从中选择的逻辑和数据是什么样子。如果您对大型数据集运行此SELECT,并且逻辑相当简单,例如在A和B之间执行WHEN Val,那么您可能会得到一些提升,将逻辑放在where子句中,并执行UNION,但不会有太大差异。在一个相对较小的数据集上,它可能根本没有什么不同。这也可能取决于您是否看到这段代码是一成不变的,还是会定期更改。UNION ALL肯定会有相当多的代码行,因为您基本上是用不同的WHERE子句一遍又一遍地编写相同的查询,但它也可能更容易阅读和维护。
https://stackoverflow.com/questions/15283541
复制相似问题