我有表所示:MySQL的复制场ID添加到当前场
id IP Subnet Duplicates Valid
1 foo 16 1
2 bar 24 1
3 foo 28 1
4 foo 32 1
我想重复的行ID更新说明。是这样的:
id IP Subnet Duplicates Valid
1 foo 16 3,4 0
2 bar 24 1
3 foo 28 1,4 0
4 foo 32 1,3 0
这里是我的查询:
update tblSample inner join (
select
t1.Id,
group_concat(t2.Id) dups
from
tblSample t1 inner join tblSample t2
on t1.Id<>t2.Id) AND
((t1.IP >> (32-LEAST(t1.Subnet,t2.Subnet))
<< (32-LEAST(t1.Subnet,t2.Subnet))
=
((t2.IP >> (32-LEAST(t1.Subnet,t2.Subnet))
<< 32-LEAST(t1.Subnet,t2.Subnet)))
group by
t1.Id
) s on tblSample.Id = s.Id
set
Valid=0 ,Duplicates=dups
我的代码工作,但它的速度很慢(约53秒10000记录)
我怎样才能提高速度? 有什么办法可以减少比较操作。
这可能不是解决办法,但你可以使用EXPLAIN的声明MYSQL来跟踪你的查询是如何执行的。它应该帮助你建立更高效的查询连接.. – Archit