如果我有 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,理论上哪个会更快?我知道做实验是找出答案的最好方法,但我需要听听专家对理论的看法。谢谢
该UNION
运算符要求在返回任何行之前删除结果集中的重复元组(行)。这实际上是一个 SORT UNIQUE 操作。这对于小型结果集相对便宜,但对于大型结果集,它可能会占用服务器时间(即需要很长时间)。
从理论上讲,将查询与UNION ALL
运算符而不是UNION
运算符结合起来最快,因为它将消除 ( n -1) 次到数据库的往返,而不是单独运行查询。但是对于较大的n值,您将遇到 SQL 文本大小(最大数据包大小)的实际限制。
考虑到UNION
运算符和单独查询之间的选择,对于大型结果集,单独查询在服务器端的资源密集度将降低。
简而言之,这实际上是每个查询的繁重工作与 SORT UNIQUE 操作的繁重工作之间的权衡。
由于UNION ALL
n 个子查询可以作为 n 个选择执行,因此智能 DBMS 最多应该能够完成与 n 个单独选择相同的工作。
这留下了往返时间,即用于 n个n * rtt
查询和rtt
.UNION ALL
UNION ALL
理论上,一个智能 DBMS 应该总是比 n 个单独的查询更快地回答一个。
在实践中,像往常一样,所有赌注都没有经过测试。