我有一張表,我已經創建了一個全文目錄。桌子剛剛超過6000行。我在索引中添加了兩列。第一個可以被認爲是各種唯一的標識符,第二個可以被認爲是該項目的內容(我的表格中有11個其他列,不是全文目錄的一部分)。這是一對夫婦行的例子:全文索引呆滯。尋找替代品
TABLE: data_variables
ROW unique_id label
1 A100d1 Personal preference of online shopping sites
2 A100d2 Shopping behaviors for adults in household
在在前端我的web應用程序,我有一個文本框,用戶可以鍵入拿到賽他們任何條款的項目清單搜索UNIQUE ID
或LABEL
列。因此,例如,如果用戶在sho
或a100
中鍵入,則列表將填入上面的兩行。如果他們輸入behav
那麼只有上面的第2行填充一個列表。
這是通過每個keyup
上的Ajax請求完成的。 PHP調用看起來像SQL服務器上的存儲過程:(@search
是從傳遞到存儲過程的用戶的文本)
SELECT TOP 50 dv.id, dv.id + ': ' + dv.label,
dv.type_id, dv.grouping, dv.friendly_label
FROM data_variables dv
WHERE (CONTAINS((dv.unique_id, dv.label), @search))
我注意到,這得到相當低迷,尤其是當我在查詢中不使用TOP 50
時。
我在尋找的是直接在SQL Server上或通過放棄全文索引的想法,並使用jQuery來搜索客戶端上的可搜索項目數組來加速這種方式。我已經看了一下jQuery自動完成的東西和一些其他的自動完成的jQuery插件,但還沒有試圖模擬任何東西。這將是我的下一步,但我想首先在這裏查看,看看我會得到什麼建議。
在此先感謝。
你能確認你已經測量單獨的SQL性能,而不是隻用你的網頁?如果你正在使用網頁來測試它,那麼很多其他的事情可能是這個問題,確定你知道這一點,只是想仔細檢查。當你輸入更長的搜索字符串時,它會變得更快嗎?如果是的話,這意味着它不是sql – rlb 2013-03-02 20:19:06
'這是通過每個keyup上的Ajax請求完成的 - 在這種情況發生之前是否有最小長度?這是我的寵兒之一,所以我不會喋喋不休,但當頁面吞掉了我的前幾個按鍵時,我確實討厭它。從性能角度來看,在調用全文搜索之前等待至少三或四個字符可能會更好。最初的幾次檢索帶回了小船。即使你在調用之前等待幾個字符,我也不會期望它能很好地擴展。而且我知道,由於雲延遲問題,它在雲中的分貝數據庫上效果不佳。 – Tim 2013-03-09 11:07:59
提姆:是的 - 它在2次按鍵後觸發。我無法做更多,因爲有唯一的ID只有兩個字符長。 – tptcat 2013-03-09 18:40:25