0

这是我的表:

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_startip_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 还是我的索引/查询中的错误?

4

0 回答 0