我有一個200000條記錄的郵政編碼的mysql表。我想從中選擇一個字段post_code
,並在文本框中獲取自動建議的郵政編碼。我會用jQuery來做這件事,但我想知道我應該用哪種方法在php中創建代碼並更快地選擇記錄?如何從大型數據庫中更快地選擇記錄?
回答
沒有具體說明,很難給出比「編寫更快的查詢」更具體的答案。
我打算在這裏做一個巨大的假設,並假設您正在創建一個填充自動完成表單的Web應用程序。
你不需要所有的後編碼!差遠了。
推遲填充自動填充,直到用戶開始輸入郵編字段。發生這種情況時,請執行AJAX加載以從數據庫獲取郵編。
爲什麼這樣做比只讀取所有郵政編碼更好?
因爲您現在知道用戶的郵政編碼以什麼字母開頭。
瞭解郵政編碼的第一個字母意味着您可以消除數據集中不以相同字母開頭的任何郵政編碼。您將不得不獲取20000個郵編,以便獲取少於2000個郵件,從而將性能提高一個數量級。如果您等到用戶輸入了兩個字母,則可以獲得更多的數據量。
此外,我假設您在郵政編碼列上使用索引,對不對?
是的,您是正確的。看到我對第一個答案的評論:) – aslamdoctor
我認爲你只是想在「post_code」上創建一個MySql索引?
問:您計劃一次提取多少個郵政編碼(並傳回瀏覽器)?一?五? 200000?
它將基於前3個字符。所以它會需要前3個字符和顯示建議。我認爲它不會一次超過100條記錄。因爲這將在文本框中的自動建議,你可以假設,每個按鍵(在輸入3個或更多字符後)將進行查詢 – aslamdoctor
您可以使用Sphinx-Php Api來處理大數據庫
但是您將需要首次使用這種方式爲您的搜索索引器文件。
或可以去Zend Lucene Search
你可能要篩選用戶的當前輸入匹配的記錄和查詢應該如下:
select postal_code from table_name where postal_code like '<userinput>%' LIMIT 50 eg: '60%'
併發送回這個結果設置爲你的jQuery回調函數。請記得對取回的郵政編碼設置限制,因爲您不想發回過多的數據,這不僅會影響性能,而且不直接幫助用戶。
這裏的情況是我無法設置記錄限制,因爲這是一個Web應用程序,它需要建議中的每個可能的郵政編碼條目,否則會出現數據錄入操作的問題。 – aslamdoctor
考慮一下,如果您確實顯示用戶1000條記錄,您認爲用戶通過該列表瀏覽並找到正確的郵政編碼是合理的嗎?他會嘗試進一步過濾嗎? – Baz1nga
- 1. 從數據庫mysql中選擇記錄
- 2. 快速從mysql數據庫中選擇最後n條記錄os大小700Mb
- 3. 從數據庫選擇記錄(sqlite3)
- 4. 如何從MySQL數據庫中選擇一條隨機記錄?
- 5. 如何從php數據庫選擇類似的記錄?
- 6. 如何更快速地刪除大型SQL Server中的數據?
- 7. 數據庫選擇快速更新
- 8. 根據時間隨機選擇從數據庫中記錄
- 9. 大型數據庫500萬條記錄
- 10. 在大型數據庫表中標記重複記錄的最快方法
- 11. 如何選擇數據庫中的下一條記錄?
- 12. 如何更快地過濾gridview記錄?
- 13. 根據選擇查詢結果更新數據庫記錄
- 14. 如何在ORM數據庫更改多條記錄快?
- 15. 從記錄收集類型中選擇數據
- 16. Linq - 從ID數據庫中選擇記錄
- 17. 顯示從數據庫中選擇的記錄
- 18. 選擇從數據庫中唯一記錄
- 19. 從MYSQL數據庫中選擇記錄按天分組
- 20. 從數據庫中取出一條記錄到選擇列表
- 21. 從oracle數據庫中選擇n條記錄
- 22. 從數據庫中選擇相關記錄
- 23. 列出從數據庫中選擇的記錄。
- 24. PHP隨機從數據庫中選擇記錄
- 25. 使用SQL從Access數據庫中選擇記錄對
- 26. 從MySQL數據庫中選擇一條記錄
- 27. 從多個數據庫中選擇記錄
- 28. 我想從moodle數據庫中選擇一條記錄
- 29. 從數據庫中選擇一條記錄Flask/Sqlite
- 30. 無法從數據庫中選擇記錄
你真的有200000個獨特的郵政編碼嗎?如果不是爲獨特的郵政編碼創建一個單獨的表並使用它來代替。看起來像非規範化的數據庫。 – Shahzeb
獨特的郵政編碼可以超過20萬,甚至加拿大也有大約一百萬個獨特的郵政編碼。 – Alyas