如果我有n个查询q1,q2,q3 ... qn,并且每个查询都运行t1,t2,t3 ... tn作为运行时间。
我还有另一个查询q1 UNION ALL q2 UNION ALL q3 .... UNION ALL qn和运行时间是tu
比较tu和t1 + t2 + t3 + ... + tn,哪一个在理论上会更快?我知道做实验是最好的方法,但我需要听听专家对这个理论的看法。感谢
答案 0 :(得分:2)
UNION
运算符要求在返回任何行之前删除结果集中的重复元组(行)。这实际上是一个SORT UNIQUE操作。这对于小型结果集来说相对便宜,但对于大型集合,它可能在服务器时间上占用大量资源(即需要很长时间。)
理论上,将查询与UNION ALL
运算符而不是UNION
运算符组合将是最快的,因为它将消除( n -1)到数据库的往返,vs分别运行查询。但是对于 n 的大值,您将在SQL文本的大小(最大数据包大小)上遇到实际限制。
考虑到UNION
运算符和单独查询之间的选择,对于大型结果集,单独的查询在服务器端的资源消耗将会减少。
简而言之,它实际上是每次查询繁重工作与SORT UNIQUE操作繁重之间的权衡。
答案 1 :(得分:2)
由于具有n个子查询的UNION ALL
可以作为n个选择执行,因此智能DBMS应该能够完成与n个单独选择相同的工作。
这会留下往返时间,n个查询为n * rtt
,rtt
为UNION ALL
。
理论上,智能DBMS应该总是比单独的查询更快地回答UNION ALL
个。{
在实践中,像往常一样,所有投注都没有经过测试。