我只想确认
所以我有2个表具有完全相同的列但内容不同 让我们说表A和B. 我正在创建视图表AB,它只是
select * from a
union
select * from b
当每张桌子的数据变得像数百万人一样大时
select * from ab where `value`>1000
和
一样快select * from a where `value`>1000
union
select * from b where `value`>1000
现在数据只有几千个,所以我根本没有任何问题
答案 0 :(得分:1)
这两个选项确实不同。
想象一下我们有
a:400万行,1百万有价值> 1000
b:200万行,1百万有价值> 1000
第一个解决方案:
select * from ab where value > 1000
构建一个包含600万行的临时表,然后应用过滤器值> 1000
第二个解决方案:
select * from a where value > 1000
union
select * from b where value > 1000
您使用100万条记录过滤a,使用100万条记录过滤b,然后合并2百万条
的结果在第一个解决方案中,您使用的是一个600万的临时表。 在第二个中,你使用2个100万个临时表来构建一个200万的表。 这不一样。
如果您知道a和b中有不同的结果,则可以使用union all
进行重大改进。
请参阅此处的基准:https://www.percona.com/blog/2007/10/05/union-vs-union-all-performance/