對不起,這可能是一個noob問題,但我不知道如何搜索這個。通過執行分頁減少連接表,按?
用戶案例
一個全網站搜索功能:當用戶輸入關鍵詞並提交表單,該系統應該在這兩個標題&內容的論壇,博客,產品搜索。所有這些類型的頁面的搜索結果應顯示在一個單獨的分頁列表中。用戶還可以選擇通過相關性或新近度對結果進行排序。
我做了什麼
我正在使用LMAP。我有這些三種頁面類型的數據表,並且我已將內容列的標題作爲索引密鑰&。
我知道連接表是一個非常糟糕的主意,所以我爲搜索論壇,博客和產品做了三個單獨的查詢。我將所有的數據導入到PHP中,並將它們變爲數組,併爲每行搜索結果編寫一個相關值的函數。對於新近來說,所有這些表中都有「updateDate」列,所以它沒問題。
現在我有三個不錯的數組。我可以內爆()他們和排序()他們很容易。我也可以通過array_slice()來渲染分頁。
是什麼使我皺眉
不必要的性能浪費。是的,我所做的是能夠在用戶案例中完成所有的事情,但是---我不知道該怎麼做(我是一個初學者)---但我相信這樣的表現可以更好。
- 第一次查詢後,都需要我們已經從數據庫中獲取數據。但隨着我的解決方案,每當用戶點擊搜索結果的另一頁,或更改「排序」,php將重新開始,並再次執行[sql查詢,相關函數,implode()]。我可以如何將結果數組存儲在某處,這樣系統可以爲下一次用戶操作節省一些能量?
- 大部分用戶不會點擊搜索結果的所有頁面。我猜想90%的用戶不會繼續關注第10頁,這意味着(可能)是前200個記錄。那麼,我可以做任何事情來停止sql查詢而不是所有的結果嗎?此外,在流量增長的同時,可能會出現一些關鍵字並且重複搜索大量時間,我該怎麼做才能減少這些搜索的重複次數? (請打我,如果你想我想得太多了)
感謝您閱讀這些,請糾正我,如果我的觀念是不正確,或者告訴我,如果我錯過了什麼在這種情況下,用戶需要注意。謝謝,願上帝的愛與你同在。
編輯:我沒有使用任何PHP框架。
搜索 「緩存」。但是,在那裏*有大量的訪問者(比如它太慢),不要擔心。另外一個「連接表是一個非常糟糕的想法」是**不是一個正確的廣義信念;從適當的規範化和連接表開始,比起擔心一些尚未解決的性能問題要好得多。不妥協的模型眼前利益可以簡單地進行使用使用MySQL的全文*正確的指數*和*是*,雖然也有像[Lucene的其他選項(http://stackoverflow.com/questions/6820527/lucene-或MySQL的,全文搜索)。 – user2864740 2014-09-03 02:29:54
@ user2864740對不起,你可以慢一點點?我不知道「從適當的標準化開始」是針對comman案的,而不是針對這種情況?因爲這些頁面類型之間沒有關係,它們就像模塊,而不是列中的爭用...(createUser和updateUser除外)。所以我會認爲不會建議加入他們時選擇,對吧? – 2014-09-03 02:44:35
你是拉動整個搜索結果到瀏覽器的JavaScript,但只顯示一小行,同樣的進程正在發生第2頁?你應該看看SQL分頁。 – Malk 2014-09-03 02:48:59