优化搜索查询

时间:2017-09-14 11:29:37

标签: mysql search optimization query-optimization


这似乎是一个多余的问题,但我找不到这个问题的正确答案 我有一个包含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。,则需要花费太多时间。在这种情况下,优化查询或以其他方式执行搜索的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

如果您向InnoDB的FULLTEXT提供过短的字符串,则返回零结果。所以...过滤掉任何短于innodb_ft_min_token_size的字符串。

如有必要,请使用REGEXP '[[:<:]]A[[:>:]]分别对其进行测试,以查找单字母A

或者将它们扔在一起。这将检查只有1个字母的英文单词:REGEXP '[[:<:]][AI][[:>:]]

相关问题