任何使UNION ALL运行得更快的方法?

时间:2017-02-21 16:41:25

标签: mysql

我有很多完全相同的表格。 TableA,TableB,TableC,TableD等我想从中创建视图。 执行select * from TableA需要20毫秒,执行select * from tableB需要20毫秒,但这样做 (select * from TableA) union all (select * from TableB)需要20多分钟。 这些表具有完全相同的列。我需要更改my.cnf中的任何设置,还是创建运行速度更快的视图?所有桌子都有1.5米到10米左右的行。

解释结果

PRIMARY TableA  ALL                 28808685    
UNION   TableB  ALL                 15316215    
UNION RESULT    <union1,2>  ALL     Using temporary

表格结构: 10 varchar(20),5个无符号INT。

1 个答案:

答案 0 :(得分:1)

我的猜测是select * from TableA不需要20毫秒。开始返回结果需要20毫秒。

虽然我将回答您的问题,但您应该重新审视您的数据结构。拥有相同布局的多个表通常是一个非常糟糕的主意。相反,您应该有一个包含所有行的表。

但是,你似乎没有。

尝试运行没有括号的union all

select * from TableA union all
select * from TableB;

MySQL习惯于实现子查询。我不确定它是否使用union all子查询执行此操作,但考虑到您对问题的描述,可能会看到。