发生奇怪的事情。任何人都可以请解释。 我有一张桌子。在MySQL中使用索引
CREATE TABLE "country_ip" (
"begin_ip" varchar(15) NOT NULL,
"end_ip" varchar(15) NOT NULL,
"begin_ip_long" int(10) unsigned NOT NULL,
"end_ip_long" int(10) unsigned NOT NULL,
"id" char(2) NOT NULL,
"label" varchar(50) NOT NULL,
KEY "begin_ip_long" ("begin_ip_long","end_ip_long"),
KEY "end_ip_long" ("end_ip_long")
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
约有150 000条记录。 下一查询具有巨大的时间差
0.06329400 | SELECT * FROM `country_ip` WHERE '1405662435' BETWEEN `begin_ip_long` AND `end_ip_long` LIMIT 1
0.06214600 | SELECT * FROM `country_ip` USE INDEX (begin_ip_long, end_ip_long) WHERE 1405662435 BETWEEN `begin_ip_long` AND `end_ip_long` LIMIT 1
0.00008400 | SELECT * FROM `country_ip` USE INDEX (end_ip_long) WHERE 1405662435 BETWEEN `begin_ip_long` AND `end_ip_long` LIMIT 1
任何人都可以解释它为什么会发生?我的意思是,为什么只有USE INDEX(end_ip_long)同时使用USE INDEX(begin_ip_long)或USE INDEX(begin_ip_long,end_ip_long)没有效果有所帮助。谢谢。
'谁能解释吗?有趣的是,MySQL本身可以“最好地解释”:) –
你需要一个R-Tree(空间)索引。 – eggyal
看起来像InnoDB不支持空间索引。无论如何它不能解释任何东西 – user2893612