我的数据库中有两个表
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/