这是我的表:
CREATE TABLE `ip2_org_translators` (
`ip_start` bigint(12) unsigned DEFAULT NULL,
`ip_end` bigint(12) unsigned DEFAULT NULL,
`organization` varchar(255) DEFAULT NULL,
KEY `ip_start` (`ip_start`,`ip_end`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
ip_start
注意和上的索引ip_end
。以前ip_start
和ip_end
列是 int(10) 仅供参考。
这是我的查询:
SELECT organization FROM `ip2_org_translators` WHERE (1823194021 >= ip_start AND 1823194021 <= ip_end)
如果我将数字降低十的幂(例如 182319402),则此查询在标称的 6-8 毫秒范围内运行。但是,如果数字更大(10 个或更多位置),则查询需要大约 700 毫秒才能运行。解释这个查询给出
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE ip2_org_translators ALL ip_start NULL NULL NULL 1392767 Using where
请注意,它不使用ip_start
索引,而是进行全表扫描。
这是 MySQL 还是我的索引/查询中的错误?