有一张世界各地的IP表,包括ip字段和地区字段,数据量44万;另有一张世界各地地区信息Area表,包括国家、省、市、县字段,数据量3800;现在的需求是:
1. 根据这两张表,将IP表的address匹配到Area表的Name,最终产生一张IP对应的规范地址表IPToArea;
2. 传入一个IP地址,根据IpToArea表中的记录,查询出规范的地址;
表信息如下:
 Ip表
Area表 
IpToArea表我试过直接用T-Sql以及放到DataSet中两种方式去处理,大致的思路就是利用双重循环,但是运行过程非常缓慢,请教各位,有什么方法可以提高处理的效率?

解决方案 »

  1.   

    IP表的Address和Area表的Name中的数据规律吗?
    如果IP中存了广东省广州市天河Area表中有
    广东省
    广州市
    天河区(或者天河或者天河区一二之类的)那这样就不好匹配了,情况太多了。
      

  2.   

    先弄清楚可行性吧
    你怎么用address去匹配area的?这个事情最好是先把那3800个area取出来放到内存里
    然后逐条处理ip这样会快一些
      

  3.   

    我试过直接用T-Sql以及放到DataSet中两种方式去处理,大致的思路就是利用双重循环,但是运行过程非常缓慢,请教各位,有什么方法可以提高处理的效率?
    -------------
    1、至于效率问题,宏观上来说是用空间来换时间。同时采用更好的算法。
    2、你的双循环,大数据量时肯定不是最好的算法。可否想办法让它能适用类似二分法或其它更高效的算法来处理。
    3、如果自已没有更好的算法,那就让数据库系统来处理吧。可以通过增加字段、索引、临时表、视图等。
    4、IpToArea表可否改成视图,以便减少维护工作。
    5、可增加表来提高效率。比如中国的和日本的区分。(亚洲、欧洲的区分也行)。
    6、应用中可以先读到内存中/缓存、哈希表等方式来提高效率。