这是我的表格:
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)FYI。
这是我的查询:
SELECT organization FROM `ip2_org_translators` WHERE (1823194021 >= ip_start AND 1823194021 <= ip_end)
如果我将数字降低10的幂(比如182319402),则此查询将在标称的6-8ms范围内运行。 如果然而更大的数字(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或我的索引/查询中的错误吗?