You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@doris.apache.org by jeansit <je...@digitalgd.com.cn> on 2021/05/10 16:17:01 UTC

IP归属地问题的咨询

您好,我有一个涉及通过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;


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