Mysql Union时间V.S.逐个单独查询

时间:2012-09-25 20:33:26

标签: mysql sql union

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

2 个答案:

答案 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 * rttrttUNION ALL

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