gpt4 book ai didi

mysql - 如何通过 ip 地址查询加快国家检测?

转载 作者:行者123 更新时间:2023-11-30 21:24:57 30 4
gpt4 key购买 nike

我正在尝试使用来自此服务的地理位置 ip db:

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

我将 csv 文件导入到我的 mysql 数据库中。现在我的表有 2,716,854 行。我的查询速度很慢。

我的表sql:

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;

我的查询:

SELECT *
FROM `ip2location_db3`
WHERE ip_from <=1598483915
AND ip_to >=1598483915

平均查询时间:

1.3627 seconds.

我的表格是这样的:

enter image description here

我怎样才能加快这个查询?

最佳答案

您的表 SQL 应该遵循他们的常见问题 https://www.ip2location.com/faqs/db3-ip-country-region-city#database

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;

那么你的查询应该是:

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

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

关于mysql - 如何通过 ip 地址查询加快国家检测?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59610684/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com