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;
想知道如何可以进行优化操作???请给予解答。