0

如果我有 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,理论上哪个会更快?我知道做实验是找出答案的最好方法,但我需要听听专家对理论的看法。谢谢

4

2 回答 2

2

UNION运算符要求在返回任何行之前删除结果集中的重复元组(行)。这实际上是一个 SORT UNIQUE 操作。这对于小型结果集相对便宜,但对于大型结果集,它可能会占用服务器时间(即需要很长时间)。

从理论上讲,将查询与UNION ALL运算符而不是UNION运算符结合起来最快,因为它将消除 ( n -1) 次到数据库的往返,而不是单独运行查询。但是对于较大的n值,您将遇到 SQL 文本大小(最大数据包大小)的实际限制。

考虑到UNION运算符和单独查询之间的选择,对于大型结果集,单独查询在服务器端的资源密集度将降低。

简而言之,这实际上是每个查询的繁重工作与 SORT UNIQUE 操作的繁重工作之间的权衡。

于 2012-09-25T20:47:36.890 回答
2

由于UNION ALLn 个子查询可以作为 n 个选择执行,因此智能 DBMS 最多应该能够完成与 n 个单独选择相同的工作。

这留下了往返时间,即用于 n个n * rtt查询和rtt.UNION ALL

UNION ALL理论上,一个智能 DBMS 应该总是比 n 个单独的查询更快地回答一个。
在实践中,像往常一样,所有赌注都没有经过测试。

于 2012-09-25T20:54:51.827 回答