我的数据库中有两个表

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分钟自动运行此查询。

如何改善这个查询?

最佳答案

如果A1.Sn被正确索引,则子查询实际上是即时的。您可以轻松地计时其执行时间(仅是子查询),或者运行EXPLAIN [the subquery]来检查执行计划。

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

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

关于mysql - 将数据从一个表插入到另一个表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25020486/

10-13 22:15