我有一個系統,它將從數據庫中返回所有用戶,並按距參考郵政編碼最小的距離排列結果。按照郵政編碼距離的升序對用戶進行計算和排序的最快方法
例如:用戶會在網站上,輸入郵政編碼,它會回報他最近誰是他的拉鍊(升序)
爲什麼我現在做的這一切其他用戶,爲什麼它一個問題 ?
該系統包含超過3000萬用戶及其郵編。我正在搜索特定州和城市的所有用戶(將數據集縮小到約10,000)。
這是實際發生問題的地方。現在,mysql(10,000)行發送給PHP的所有結果都會發送到一個郵政編碼計算器庫,它可以計算基本郵政編碼和用戶郵政編碼之間的距離 - 10,000次。然後通過最接近的郵政編碼對結果進行排序。
正如你所看到的,這是非常糟糕的優化代碼。 10,000條記錄通過兩次循環。更不用說每個httpd進程只需將數據傳遞給mysql的RAM數量。
我想問一下這裏的專家有沒有優化這個?
我有一些我自己的想法,但我不確定它們的效率。
試着做所有的郵編計算和在MySQL本身的順序,並返回分頁的行數。 爲此,我需要將郵政編碼計算邏輯與存儲過程之間的距離。這樣我就可以防止在PHP中處理10,000條記錄。但是,仍然存在問題。我不需要計算已經計算出的郵政編碼的距離(對於具有相同郵政編碼的2個用戶)。
其次,我如何在MySQL中使用存儲過程命令行?
你們認爲什麼?這是一個好方法嗎?我可以期待使用它的性能提升嗎? 你有其他建議嗎?
我知道這個問題是巨大的,我真的很感激你讀到最後的時間。我真的很想聽聽你對此的想法。
我已經有一個郵政編碼表,它在美國和它們各自的緯度/經度都有everyzip代碼。這會有幫助嗎? – 2011-03-06 22:06:16