我已經拍攝了一個郵政編碼數據庫,並且預先計算了在某個半徑範圍內與其他郵政編碼的距離。數據庫本身大約是2.5GB,所以沒有什麼特別的。當使用where子句時,緩慢的mysql查詢
這樣做的目的是能夠:
select * from zipcode_distances where zipcode_from=92101 and distance < 10;
迄今爲止唯一的指標,我定義是:
(zipcode_from, distance)
但是,運行查詢需要約20秒得到結果。
當我刪除「and distance < 10
」子句時,結果是即時的。
任何意見,將不勝感激。
編輯:
這裏是create語句:
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,表,possible_keys ,key,key_len,ref,rows, 過濾,超1,操作簡便,zipcode_distances,ALL, idx_zip_from_distance,NULL,NULL,NULL,62548720,100.00,使用其中
謝謝!
請粘貼解釋計劃和表格構造 –
請顯示錶格佈局,因爲目前很難提供幫助,除非我們看到您的數據存儲距離到郵政編碼的距離。 – donlaur
嘗試'SELECT some_column FROM ...'開始。 – markus