Mysql
如何對大張郵政編碼表進行快速簡單的查詢
我有一張包含 250 萬個郵政編碼的表格。
我必須在使用者搜尋郵政編碼時填充一個文本框,因此查詢必須非常快。
該表由以下部分組成:
ID (Primary key), Postcode (Unique), Population INT(11) NOT NULL
查詢是:
SELECT * FROM `postcodes` WHERE substr(Postcode,1,LENGTH_OF_TERM) ='TERM' order by population desc limit 0,10
TERM
是使用者輸入的內容,LENGTH_OF_TERM
是TERM
.儘管我還在
Postcode
查詢上創建了一個索引,但速度非常慢(3-4 秒)。如何提高查詢速度?
添加郵政編碼、人口組合索引可能有助於
ORDER BY
部分 SQL。ALTER TABLE postcode ADD KEY postcode_population (postcode, population)
主要問題是在列上執行函式意味著它無法使用和索引。所以這裡應該是一個等效的查詢,它沒有函式 over
postcode
。SELECT * FROM `postcodes` WHERE Postcode LIKE 'TERM%' order by population desc limit 0,10
您可以看到哪個索引與
EXPLAIN {query}
. MySQL 在表達式中每個表只使用一個索引。
您要求的可以完成。但是,我建議在您的應用程序啟動時在後台將郵政編碼列表讀入一個集合(Java 中的 ArrayList)中。設計一個文本框或組合框擴展來處理列表,在使用者輸入字元時縮小顯示的程式碼列表。您可能想詢問其他 SE 列表,看看是否有人在您使用的平台對像中已經設計了這樣的東西。
無論查詢的調整如何,您都可以在執行一個查詢的時間內執行大量的記憶體計算和操作。我說的是微秒與毫秒。那是三個數量級。超音速噴氣式飛機的飛行速度僅比人跑步的速度快兩個數量級。
您根本不會得到想要在擊鍵之間執行 I/O 的響應。