2013-03-27 58 views
0

我們一直在爲mySQL數據庫建立一個搜索結果系統原型,其中包含約200萬個姓名和地址以及300萬個關聯訂閱和會議出勤記錄。加速搜索結果顯示的最佳方式

在執行搜索,所有結果中返回的時刻 - 每個結果我則執行第二查詢,以查找訂閱/會議的人員的唯一識別。我在所有重要列上都有索引,並且在phpMyAdmin(0.0xxx秒)內執行相當快速的單個查詢,但將其饋送到網頁中以顯示(PHP,使用DataTable進行分頁),並且該頁面需要幾秒鐘才能呈現。我們已經嘗試將數據移植到Lucene數據庫,它就像LIGHTNING一樣,但瓶頸似乎仍然顯示結果而不是檢索它們。

我想這應該是由於在瀏覽器中構建,提供和渲染頁面的開銷。我想我可以通過執行GROUP_CONCAT來刪除我在上面提到的子查詢,以獲取原始查詢中的訂閱代碼,但是如何加快顯示頁面的結果?

我想一點,經常用AJAX /服務器端分頁查詢可能是去這裏的方式(可能得到50個結果,查詢小,頁面比較小,可以更快地提供服務),但我歡迎任何建議你們可能有。

+0

你能提供任何sql samples/EXPLAIN/schema信息,包括索引嗎?有可能第二個查詢限制了你毫秒的加起來。 – 2013-03-27 10:05:58

+0

您是否嘗試過使其沒有「數據表」 – Rob 2013-03-27 10:06:49

+0

@ Simonatmso.net - 這裏是按名稱搜索某人的例子查詢:http://pastebin.com/DWscK2Y4 - 有很多更在訂閱查找查詢比需要有是因爲系統中其他地方使用了相同的查詢。可能只爲搜索結果編寫單獨的較小版本。 – MikkyX 2013-03-27 10:19:30

回答

2

即使您正在使用分頁與數據表,所有的結果,雖然使用的是在一次server side feature.

負載2萬行總會慢慢呈現先加載到頁面的源代碼。你必須去服務器端分頁,它可以通過AJAX或一個正常的PHP腳本。

您也可以考慮使用一個緩存系統,以加快數據從服務器的負載,避免調用數據庫不需要的時候。如果您的數據可以隨時隨機更改,則可以始終使用函數來檢查自上次緩存數據以來數據是否發生更改,如果是,則更新緩存的數據。

+0

也許像搜索視圖,並隨機同步該視圖?我並不是每次都返回所有200萬行,但結果的計數可以達到5位數......這是服務器一次呈現給瀏覽器的大量數據。我越想到這一點越明顯,似乎小的結果是立即改善...... – MikkyX 2013-03-27 10:22:23

+0

只是作爲一個例子,在那裏的任何大網站。他們都沒有一次加載該數據量。通過服務器端進行分頁和排序,並通過AJAX進行自動完成搜索,如果沒有,則通過POST進行搜索。 – Alvaro 2013-03-27 10:28:18

+0

是的。任何建議緩存系統可以做到這一點?我已經在思考一下,是否偶爾會刷新mySQL View(每隔幾分鐘添加一條新記錄,更新次數不太頻繁 - 實時性不是最重要的)是否會更好 - 您的想法是什麼? – MikkyX 2013-03-27 10:31:18