有如下两个表,引擎都为MyISAM
a,表a中包含150W条数据
b,表b中包含50W条数据
其中表a的iplong为ip地址的long类型,如果a.iplong >= b.ip1 and a.iplong < b.ip2 表b中的该记录中的country和city填充到a中的country和city
现在写了一条语句
update a inner join (SELECT * FROM b) on a.iplong >=b.ip1 and a.iplong < b.ip2
set a.country = b.country, a.city = b.city ;
粗略估计了一下可能需要16个小时。
请问有什么办法提升速度吗?这条语句耗时在哪部分?
更新1explain update copy_of_log a use index (primary, iplong) inner join ipdizhi b on a.iplong >=b.ip1 and a.iplong < b.ip2
set a.country = b.country, a.city = b.city
返回
没使用任何索引?是因为连接不会使用索引吗?这种功能难道使用子查询会更快吗?
嵌套了子查询,任何SQL一旦嵌套了子查询速度大大降低,我在工作中,除非一定必须用子查询,否则我绝不会写嵌套子查询的,我看你 (select * from b) 后面居然不加 limit 限制行数?万一要是1000万的数据呢?