您好,我有一个涉及通过IP查找归属地的问题想咨询在DorisDB中怎么设计表结构并解决。


数据库:mysql 5.7


有二张表结构如下:


CREATE TABLE `ip_range_for_region_name` (
  `ip_start_inet_aton` int(10) unsigned COMMENT '开始IP段,把开始IP转换成了正整形',
  `ip_end_inet_aton` int(10) unsigned COMMENT '结束IP段,把结束IP转换成了正整形',
  `country` varchar(255) DEFAULT NULL COMMENT '国家',
  `province` varchar(255) DEFAULT NULL COMMENT '省份',
  `city` varchar(255) DEFAULT NULL COMMENT ‘城市',
  KEY `idx_ ip_range_for_region_name_1` (`ip_start_inet_aton`),
  KEY `idx_ip_range_for_region_name_2` (`ip_end_inet_aton`)
) COMMENT ‘IP段对应的区域名称';


CREATE TABLE `ip_address` (
  `log_base_ip` int(10) unsigned  COMMENT ‘IP地址,转换成了正整形',
  `country` varchar(32) COMMENT ‘对应的国家',
  `province` varchar(32) COMMENT ‘对应的省份',
  `city` varchar(32) COMMENT '对应的城市',
  KEY `idx_ ip_address` (`log_base_ip`)
)  COMMENT ‘IP地址’;




执行如下语句时走的cross join,都是进行了ip_range_for_region_name全表的扫描查询,执行效率很低:
UPDATE  ip_address t2 INNER JOIN  ip_range_for_region_name t1 
ON t1.ip_start_inet_aton <= t2.log_base_ip  AND t1.ip_end_inet_aton >=  
t2.log_base_ip 
SET t2.country = t1.country, t2.province = t1.province, t2.city = t1.city;


想知道如何可以进行优化操作???请给予解答。

Reply via email to