mysql视图表性能

时间:2016-06-23 14:03:39

标签: mysql

我只想确认

所以我有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

现在数据只有几千个,所以我根本没有任何问题

1 个答案:

答案 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/