我的数据库中有两个表
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分钟后自动运行此查询。
如何改进此查询?
答案 0 :(得分:0)
如果A1.Sn
被正确编入索引,那么子查询几乎是即时的。您可以轻松计算其执行时间(只是子查询),或运行EXPLAIN [the subquery]
来检查执行计划。
同样,A2.Sn
显然应该为WHERE A2.Sn >= x
条件编制索引,以便快速运行。
P.S。:您的子查询可以简化为:SELECT COALESCE(MAX(Sn), 0) +1 FROM A1
。此查询无法改进。前一个技巧只是一个不会影响执行时间的语法糖。