這似乎是一個多餘的問題,但我找不到這個問題的正確答案。
我有一個超過50列的TableA。我正在實現一個搜索功能,用於在此表的大約10列中搜索查詢。表A包含超過一百萬行
爲此,我在這10列上創建了一個複合索引。
index (col1,col_2,col_3,col_4,col_5,col_6,col_7,col_8,col_9,col_10)
現在我分解用戶的查詢使用空間作爲正則表達式。即$search_words = $search_query.split(' ');
並使用單個詞匹配我的搜索查詢。例如:
優化搜索查詢
SELECT something FROM tableA
WHERE (MATCH (col_1, col_2,col_3,col_4,col_5,col_6,col_7,col_8,col_9,col_10)
AGAINST (' +word1* +word2* +word3* +word4* ' IN BOOLEAN MODE))
此查詢工作正常一般的搜索,但如果像 A E I O公司查詢個別字母用戶的搜索需要花費太多的時間。在這種情況下優化查詢或執行搜索的另一種方式的最佳方法是什麼?
E.g.不要讓他們搜索myisam全文搜索的單個字符。將'ft_min_word_len'調整爲2,以便執行更好的全文搜索。如果你真的需要這樣做,那麼你應該考慮使用搜索引擎,例如'sphinxse'或'elasticsearch.'。 Mysql不能很好地處理它。 – abeyaz
使代碼中的最小符號數。 爲什麼不把數據分割到其他表中。 是你真的需要把所有這些列在很多列。 我會創建3列的表格 id,pointer_to_item_or_product,search_word 你需要在搜索中找到一些序列嗎? –
@abeyaz不能限制搜索,因爲它可以是一個有效的搜索,我不允許使用搜索引擎,如lucene,elasticsearch等,因爲它將在一段時間後實施。但直到那必須改進這個功能。 – Gaur93