我试图从这个服务中使用geo location ip db:
https://lite.ip2location.com/database/ip-country-region-city
我将csv文件导入mysql database.Now我的表有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;My查询:
SELECT *
FROM `ip2location_db3`
WHERE ip_from <=1598483915
AND ip_to >=1598483915平均查询时间:
1.3627 seconds.我的桌子看起来像这样:

如何加快查询速度?
发布于 2020-01-08 02:56:29
您的表SQL应该遵循其FAQ 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如果使用上述方法,您的查询速度应该会提高很多。
发布于 2020-01-06 14:20:57
用实际需要的SELECT和list字段替换SELECT *。当前,您正在返回不需要的字段,如ip_from & ip_to
https://stackoverflow.com/questions/59610684
复制相似问题