【发布时间】:2019-07-25 02:23:54
【问题描述】:
我正在尝试优化在我的字典中的搜索(109,000 个条目,MyISAM,FULLTEXT),我现在将MATCH() AGAINST() 的性能与REGEXP '[[:<:]]keyword1[[:>:]]' AND table.field REGEXP '[[:<:]]keyword2[[:>:]]' 的性能进行比较。
使用两个关键字,我得到(在 PhpMyAdmin 内)0.0000 seconds 或 0.0010 seconds 用于 MATCH() AGAINST() 查询与 0.1962 seconds 或0.2190 秒 用于正则表达式查询。速度是这里唯一重要的指标吗?我应该更喜欢哪个查询(两者似乎产生完全相同的结果)?是不是很明显——速度更快?
以下是完整的查询:
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
【问题讨论】:
-
如果答案(对于这个问题)不明显,那么它是基于意见的。
-
同意。但我在 MySQL 方面经验不足,可能会遗漏一些东西,这就是我问这个的原因。
-
对不起,如果我在笑。但与 SO 上 99% 的问题(和答案)相比,您是专家(如果您编写了这些查询):-)
-
是的,我做到了(写他们)。当然,经过相当多的实验和阅读。谢谢你:)
-
在某些情况下
FULLTEXT不起作用。它们主要围绕“单词”的异常定义,或者一种与英语的模仿程度不足以让 FT 工作的语言。但是当它起作用时,FT 比REGEXP或LIKE快很多。
标签: mysql regex match-against