郵便番号データベースを取得し、特定の半径内の他の郵便番号までの距離を事前に計算しました。データベース自体は約 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 の使用
ありがとうございました!