發生奇怪的事情。任何人都可以請解釋。 我有一張桌子。在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