2011-10-19 44 views
1

我有一個用PHP編寫的搜索頁面,它需要在MySQL數據庫中搜索,並且結果需要排序。這個搜索頁面將被許多用戶訪問(任何時候> 1000)。我可以使用MySQL臨時表來存儲搜索結果嗎?

但是,在MySQL中排序搜索結果是不可行的,因爲它會很慢。

我想存儲每個搜索結果到一個臨時表(不MySQL的臨時表),和表名存儲在另一個表內像這樣的參考:

| id | table_name | timeout | 
----------------------------- 
| 1 | result_1 | 10000 | 
| 2 | result_2 | 10000 | 

然後我可以使用臨時表在任何需要時對任何搜索結果進行排序,而無需重新構建(通過一些修改)查詢。

根據指定的超時時間,每個表將被丟棄。

假設我無法修改查詢中使用的現有表的結構,這是一個好的解決方案還是有更好的方法?請指教。

感謝

+2

數據庫指定的用途。 – 2011-10-19 02:01:47

+0

如果您需要根據關鍵字頻率或某些類別對排序結果進行排序,請使用SQL case語句生成額外的排序列。將查詢結果存儲在新表中會導致更快的查詢,這很少見 - 更可能是您插入的額外數據會降低性能,恕我直言。 –

+0

我同意@Dagon。爲什麼在MySQL中排序結果並不值得一提?數據庫系統旨在快速篩選和分類。它可能是一個索引問題,或表設計問題? – iWantSimpleLife

回答

1

有沒有必要去存儲的持久數據庫的結果時,你只是想在內存中緩存搜索結果的麻煩。你需要索引訪問關係數據嗎?如果答案是否定的,則不要將其存儲在MySQL數據庫中。

我知道phpbb(支持MySQL後端的開源網絡論壇)使用鍵值存儲來支持其搜索結果。如果論壇被配置爲給你一個指向特定結果頁面的鏈接(在URL的查詢字符串中使用搜索標識哈希),那麼該鏈接將有效一段時間,但最終會被刷新出緩存,就像你想要的一樣。如果你在MySQL上設置了,那麼實現一個完整的數據庫抽象層可能是過度的。總之:

http://wiki.phpbb.com/Cache

你應該只使用memcached的或某物存儲結果數據,並可以很容易地檢索數據,並在PHP排序。也有一些具體的PHP緩存框架,最大限度地減少加載來自解釋者的成本和卸載數據:如果表設置正確使用MySQL的排序應該比幾乎任何其他快,它的一個

https://en.wikipedia.org/wiki/List_of_PHP_accelerators

相關問題