2011-09-27 73 views
2

我有一個200000條記錄的郵政編碼的mysql表。我想從中選擇一個字段post_code,並在文本框中獲取自動建議的郵政編碼。我會用jQuery來做這件事,但我想知道我應該用哪種方法在php中創建代碼並更快地選擇記錄?如何從大型數據庫中更快地選擇記錄?

+1

你真的有200000個獨特的郵政編碼嗎?如果不是爲獨特的郵政編碼創建一個單獨的表並使用它來代替。看起來像非規範化的數據庫。 – Shahzeb

+0

獨特的郵政編碼可以超過20萬,甚至加拿大也有大約一百萬個獨特的郵政編碼。 – Alyas

回答

2

沒有具體說明,很難給出比「編寫更快的查詢」更具體的答案。

我打算在這裏做一個巨大的假設,並假設您正在創建一個填充自動完成表單的Web應用程序。

你不需要所有的後編碼!差遠了。

推遲填充自動填充,直到用戶開始輸入郵編字段。發生這種情況時,請執行AJAX加載以從數據庫獲取郵編。

爲什麼這樣做比只讀取所有郵政編碼更好?

因爲您現在知道用戶的郵政編碼以什麼字母開頭。

瞭解郵政編碼的第一個字母意味着您可以消除數據集中不以相同字母開頭的任何郵政編碼。您將不得不獲取20000個郵編,以便獲取少於2000個郵件,從而將性能提高一個數量級。如果您等到用戶輸入了兩個字母,則可以獲得更多的數據量。

此外,我假設您在郵政編碼列上使用索引,對不對?

+0

是的,您是正確的。看到我對第一個答案的評論:) – aslamdoctor

0

我認爲你只是想在「post_code」上創建一個MySql索引?

問:您計劃一次提取多少個郵政編碼(並傳回瀏覽器)?一?五? 200000?

+0

它將基於前3個字符。所以它會需要前3個字符和顯示建議。我認爲它不會一次超過100條記錄。因爲這將在文本框中的自動建議,你可以假設,每個按鍵(在輸入3個或更多字符後)將進行查詢 – aslamdoctor

0

你可能要篩選用戶的當前輸入匹配的記錄和查詢應該如下:

select postal_code from table_name where postal_code like '<userinput>%' LIMIT 50 eg: '60%' 

併發送回這個結果設置爲你的jQuery回調函數。請記得對取回的郵政編碼設置限制,因爲您不想發回過多的數據,這不僅會影響性能,而且不直接幫助用戶。

+0

這裏的情況是我無法設置記錄限制,因爲這是一個Web應用程序,它需要建議中的每個可能的郵政編碼條目,否則會出現數據錄入操作的問題。 – aslamdoctor

+0

考慮一下,如果您確實顯示用戶1000條記錄,您認爲用戶通過該列表瀏覽並找到正確的郵政編碼是合理的嗎?他會嘗試進一步過濾嗎? – Baz1nga