我已经获取了一个邮政编码数据库,并预先计算了到某个半径内其他邮政编码的距离。数据库本身大约 2.5GB,所以没什么特别的。
这样做的目标是能够:
select * from zipcode_distances where zipcode_from=92101 and distance < 10;
到目前为止,我定义的唯一索引是:
(zipcode_from, distance)
但是,运行查询大约需要 20 秒才能获得结果。
当我删除“ and distance < 10
”子句时,结果是即时的。
任何意见,将不胜感激。
编辑:
这是创建语句:
delimiter $$
CREATE TABLE `zipcode_distances` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`zipcode_from` char(5) COLLATE utf8_bin NOT NULL,
`zipcode_to` char(5) COLLATE utf8_bin NOT NULL,
`distance` double unsigned NOT NULL COMMENT 'stored in miles',
PRIMARY KEY (`id`),
KEY `idx_zip_from_distance` (`zipcode_from`,`distance`)
) ENGINE=MyISAM AUTO_INCREMENT=62548721 DEFAULT CHARSET=utf8 COLLATE=utf8_bin$$
这是解释:
explain extended select * from zipcode_distances where zipcode_from=90210 and distance < 10;
结果:
id, select_type, table, possible_keys, key, key_len, ref, rows, filtered, Extra 1, SIMPLE, zipcode_distances, ALL, idx_zip_from_distance, null, null, null, 62548720, 100.00, 使用 where
谢谢!