Mysql

如何對大張郵政編碼表進行快速簡單的查詢

  • August 31, 2018

我有一張包含 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_TERMTERM.

儘管我還在 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 的響應。

引用自:https://dba.stackexchange.com/questions/215648