问题描述:
表A有三个字段
ip_number   city  province表B有四个字段
begin_ip  end_ip city province表B是ip地址库,包括一个ip端的开始、结束、对应的城市和省份。目前有23万条数据。
表A是需要更新的目标表,根据ip_number关联B表,更新city,province字段。目前小弟的解决方案是使用join 进行表连接,条件是 A.ip_number >= B.begin_ip and A.ip_number <= B.end_ip;但是此解决方案在数据量小的时候还是可以的,当A表的数据量大的时候,基本就执行不了了。请问大家有什么好的优化方案或者解决方案么。
在线等,谢谢

解决方案 »

  1.   

    在begin_ip、end_ip上建立索引试试
      

  2.   

    首先你这种更新ip库的需求不会很多 因为ip大多不会变动太频繁另外你更新始终是更新了A表全表 这完全没必要 只要更新city  province不同的即可update A,B set A.city=B.city,A.province=B.province
    where  A.ip_number >= B.begin_ip and A.ip_number <= B.end_ip and A.city<>B.city and A.province<>B.province
      

  3.   

    SELECT * FROM tt a INNER JOIN tt b ON a.ip_number=b.ip_number 
    WHERE a.ip_number>=b.begin_ip AND b.ip_number<=b.end_ip;
      

  4.   

    的确,对于BETWEEN AND 这种条件,索引也没有多大作用
      

  5.   

     A.ip_number  上创建索引