如何通过 IP 地址查询加快国家检测速度?

Posted

技术标签:

【中文标题】如何通过 IP 地址查询加快国家检测速度?【英文标题】:How to speed up country detection from ip adress query? 【发布时间】:2020-01-06 10:44:58 【问题描述】:

我正在尝试使用此服务中的地理位置 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.

我的桌子是这样的:

如何加快查询速度?

【问题讨论】:

您可以在当前查询上运行EXPLAIN SELECT 吗?我认为您当前的idx_ip_from_to 索引将被使用,并且查询会很快。 imgur.com/V8PAX4M 这是什么意思? 这意味着 MySQL 没有使用任何索引。请问1598483915的IP值有多普遍?如果它真的很常见,那么索引可能不会加快速度。 我尝试了另一个IP值:2967684740。平均查询时间为0.9秒,仍然很慢 老实说,对于 300 万行来说,一秒钟的时间并不是特别长的恕我直言。 【参考方案1】:

您的表 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

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

【讨论】:

MyISAM 在 2020 年?应该是 InnoDB。 InnoDB 缓存可以大大加快查询速度。这也需要ORDER BY,否则 MySQL 可以随意选择一条记录。【参考方案2】:

将 SELECT * 替换为 SELECT 并列出您实际需要的字段。 目前您正在返回不需要的字段,例如 ip_from 和 ip_to

【讨论】:

执行SELECT * 效率不高,但不会显着提高性能。这个表很精简,只是需要更好的索引。

以上是关于如何通过 IP 地址查询加快国家检测速度?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过IP地址获取国家代码和货币代码? [关闭]

小技巧-如何加快github下载代码的速度(转)

如何加快sql查询执行速度?

如何加快查询速度?

如何加快phpstorm更新git索引的速度

如何加快查询速度