我有一个查询,我对结果感到满意但不是查询的性能,我想从文本中选择一些单词(不允许部分单词)(即我想选择:" dog&# 34;不是"狗")
SELECT name FROM texts WHERE name rlike '[[:<:]]text[[:>:]]' LIMIT 0, 50;
我已使用&#34;类似于&#39;%text%&#39;来测试相同的选择&#34;更快,但不能正确选择字边界作为&#34;文本。&#34; (以。结尾)或者!,开始这句话,......有太多的可能性......
有什么方法可以用相同的结果改进/修改我的查询吗?
由于
答案 0 :(得分:0)
WHERE MATCH(name) AGAINST('well-known' IN BOOLEAN MODE)
AND RLIKE '[[:<:]]well-known[[:>:]]'
FULLTEXT
比LIKE
快; LIKE
比RLIKE
快。
问题在于FULLTEXT
的例外(简短词,停用词等)。如果可行,请让您的应用查看搜索字词以决定执行此FULLTEXT AND
技巧或使用保罗的LIKE AND
技巧。
迟缓的原因...在原始查询中(仅RLIKE
),必须读取每一行,并且必须扫描每个name
以查找&#34;文本&#34;。
FULLTEXT
更快(可能更快),因为它可以使用索引直接使用&#34; text&#34;行。
LIKE
比RLIKE
快,因为算法不太复杂。 (但它仍然必须每name
获取一次。)