MySQL Match()与()vs. Regexp匹配整个单词



我正在尝试优化词典中的搜索(109,000个条目,myisam,fullText),现在我将MATCH() AGAINST()的性能与REGEXP '[[:<:]]keyword1[[:>:]]' AND table.field REGEXP '[[:<:]]keyword2[[:>:]]'的性能进行了比较。

。 。

使用两个关键字,我得到(内部phpmyadmin) 0.0000秒 0.0010秒 MATCH() AGAINST()查询与 0.1962 secount> 0.2190秒 for Regex查询。速度是唯一重要的指标吗?我应该更喜欢哪个查询(似乎都产生完全相同的结果)?是显而易见的吗?

这是完整的查询:

SELECT * FROM asphodel_dictionary_unsorted 
JOIN asphodel_dictionary_themes ON asphodel_dictionary_unsorted.theme_id = asphodel_dictionary_themes.theme_id 
LEFT JOIN asphodel_dictionary_definitions ON asphodel_dictionary_unsorted.term_id = asphodel_dictionary_definitions.term_id 
WHERE MATCH (asphodel_dictionary_unsorted.english) 
AGAINST ('+boiler +pump' IN BOOLEAN MODE)

SELECT * FROM asphodel_dictionary_unsorted 
JOIN asphodel_dictionary_themes ON asphodel_dictionary_unsorted.theme_id = asphodel_dictionary_themes.theme_id 
LEFT JOIN asphodel_dictionary_definitions ON asphodel_dictionary_unsorted.term_id = asphodel_dictionary_definitions.term_id 
WHERE asphodel_dictionary_unsorted.english REGEXP '[[:<:]]boiler[[:>:]]' 
AND asphodel_dictionary_unsorted.english REGEXP '[[:<:]]pump[[:>:]]' 
ORDER BY asphodel_dictionary_unsorted.theme_id, asphodel_dictionary_unsorted.english

MATCH/AGAINST解决方案使用完整索引,并且非常有效地搜索索引。

REGEXP解决方案无法使用索引。它总是迫使桌子扫描并用正则表达式测试每一行。随着表的增长,与行数成比例的REGEXP查询需要更长的时间。

我几年前进行了全文搜索的全文搜索投掷,在那里我比较了完整的索引方法与LIKEREGEXPREGEXP的样本数据为740万行,需要7分钟57秒,而在布尔模式下搜索InnoDB FULLTEXT索引的时间为350毫秒 - MATCH/AGAINST查询的查询更快1,363倍。

>

差异越大,您的行越大。

相关内容

  • 没有找到相关文章

最新更新