2014-12-06 77 views
1

這個問題可能已經問過,但我不能爲我的生活找到了答案。MySQL的全文檢索ORDER BY

爲了避免

SELECT * FROM student WHERE name LIKE '%searchphrase%' ORDER BY score 

其中,按照我的理解,將永遠不會使用索引,將始終使用文件排序有使用FULLTEXT指數的能力。

的問題:如何訂購按分數沒有文件排序,如果我進行全文搜索?

回答

0

結果行會在他們在全文索引,這當然是不ORDER BY score所需的順序任何順序出來,所以全文比賽需要在一個單獨的步驟爲ORDER BY排序,這是什麼filesort呢。

唯一的替代執行計劃是按score的順序檢索行,然後逐行應用全文匹配,這完全無視任何全文特定的優化。

什麼可能是有意義的,你的情況可能是對(score, name)組合索引與LIKE堅持,如果你的搜索表達式涵蓋了學生行的很大一部分,在這種情況下,你會得到一個索引掃描在score順序並且可以在索引條目上評估LIKE表達式。你得到一個完整的索引掃描,而不是全表掃描,並且不需要額外的排序,因爲索引條目已經被score排序。

但如果相對於表中的行首先進行全文索引查找的總數,其次是文件排序匹配的行數是相當小的,將是更好的計劃。

+0

謝謝你確實答案,但它真的可以去,使用文件排序的方式?這已經讓我的服務器獲得了很多開放的表格,而內存消耗正在走向高峯。我目前使用的非常窮人的解決方案是索引(分數,名稱),並使用LIKE'詞組%',它允許使用索引,但它是如此低於標準值,而不是用戶在使用搜索時期望的值。 – Adergaard 2014-12-06 12:33:19