首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何加快从ip地址查询中的国家检测?

如何加快从ip地址查询中的国家检测?
EN

Stack Overflow用户
提问于 2020-01-06 10:44:58
回答 2查看 190关注 0票数 1

我试图从这个服务中使用geo location ip db:

https://lite.ip2location.com/database/ip-country-region-city

我将csv文件导入mysql database.Now我的表有2,716,854行。我的询问很慢。

我的表sql:

代码语言:javascript
复制
CREATE TABLE `ip2location_db3`(
    `ip_from` INT(10) UNSIGNED,
    `ip_to` INT(10) UNSIGNED,
    `country_code` CHAR(2),
    `country_name` VARCHAR(64),
    `region_name` VARCHAR(128),
    `city_name` VARCHAR(128),
    INDEX `idx_ip_from` (`ip_from`),
    INDEX `idx_ip_to` (`ip_to`),
    INDEX `idx_ip_from_to` (`ip_from`, `ip_to`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

My查询:

代码语言:javascript
复制
SELECT *
FROM `ip2location_db3`
WHERE ip_from <=1598483915
AND ip_to >=1598483915

平均查询时间:

代码语言:javascript
复制
1.3627 seconds.

我的桌子看起来像这样:

如何加快查询速度?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-08 02:56:29

您的表SQL应该遵循其FAQ https://www.ip2location.com/faqs/db3-ip-country-region-city#database

代码语言:javascript
复制
CREATE DATABASE ip2location;
USE ip2location;
CREATE TABLE `ip2location_db3`(
    `ip_from` INT(10) UNSIGNED,
    `ip_to` INT(10) UNSIGNED,
    `country_code` CHAR(2),
    `country_name` VARCHAR(64),
    `region_name` VARCHAR(128),
    `city_name` VARCHAR(128),
    PRIMARY KEY (`ip_to`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

那么您的查询应该是:

代码语言:javascript
复制
SELECT `ip_from`, `ip_to`, `country_code`, `country_name`, `region_name`, `city_name`
FROM `ip2location_db3`
WHERE INET_ATON([IP ADDRESS]) <= ip_to LIMIT 1

如果使用上述方法,您的查询速度应该会提高很多。

票数 0
EN

Stack Overflow用户

发布于 2020-01-06 14:20:57

用实际需要的SELECT和list字段替换SELECT *。当前,您正在返回不需要的字段,如ip_from & ip_to

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59610684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档