将数据从一个表插入另一个表

时间:2014-07-29 16:35:35

标签: mysql

我的数据库中有两个表

create table A1 (username varchar(50), Sn int);
create table A2 (username varchar(50), Sn int);

我将数据插入表A2

insert into A2 values("abhi",1);
insert into A2 values("abhi",2);
insert into A2 values("abhi",3);
insert into A2 values("abhi",4);
insert into A2 values("abhi",5);
insert into A2 values("abhi",,6);

为此我使用此查询

insert into A1 select * from A2 where Sn >= 
(select (case when max(Sn) is null then 0 else max(Sn) end) +1 from A1) 
Limit 3;

如果表中有100 000条记录,此查询是否有效。我认为在检查max时会降低性能。我正在使用事件调度程序,它将在每5分钟后自动运行此查询。

如何改进此查询?

1 个答案:

答案 0 :(得分:0)

如果A1.Sn被正确编入索引,那么子查询几乎是即时的。您可以轻松计算其执行时间(只是子查询),或运行EXPLAIN [the subquery]来检查执行计划。

同样,A2.Sn显然应该为WHERE A2.Sn >= x条件编制索引,以便快速运行。

P.S。:您的子查询可以简化为:SELECT COALESCE(MAX(Sn), 0) +1 FROM A1。此查询无法改进。前一个技巧只是一个不会影响执行时间的语法糖。