我有很多完全相同的表格。 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。
答案 0 :(得分:1)
我的猜测是select * from TableA
不需要20毫秒。开始返回结果需要20毫秒。
虽然我将回答您的问题,但您应该重新审视您的数据结构。拥有相同布局的多个表通常是一个非常糟糕的主意。相反,您应该有一个包含所有行的表。
但是,你似乎没有。
尝试运行没有括号的union all
:
select * from TableA union all
select * from TableB;
MySQL习惯于实现子查询。我不确定它是否使用union all
子查询执行此操作,但考虑到您对问题的描述,可能会看到。