这似乎是一个多余的问题,但我找不到这个问题的正确答案
我有一个包含50多列的TableA。我正在实现一个搜索功能,用于在该表的大约10列中搜索查询。 TableA包含超过一百万行
为此我在这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 Co。,则需要花费太多时间。在这种情况下,优化查询或以其他方式执行搜索的最佳方法是什么?
答案 0 :(得分:0)
如果您向InnoDB的FULLTEXT提供过短的字符串,则返回零结果。所以...过滤掉任何短于innodb_ft_min_token_size
的字符串。
如有必要,请使用REGEXP '[[:<:]]A[[:>:]]
分别对其进行测试,以查找单字母A
。
或者将它们扔在一起。这将检查只有1个字母的英文单词:REGEXP '[[:<:]][AI][[:>:]]