我有一个查询,我对结果感到满意,但不是为了它的性能查询是,我想从文本中选择一些单词(不允许部分单词)(即我想选择:“狗”而不是“狗”)
SELECT name FROM texts WHERE name rlike '[[:<:]]text[[:>:]]' LIMIT 0, 50;我已经用"like '% text %‘“测试了相同的select,速度要快得多,但是没有正确地选择单词边界作为”text“。(以.结尾。)或者用!开始句子,....there有太多的可能性...
有什么方法可以改进/修改我的查询,得到相同的结果吗?
谢谢
发布于 2018-03-12 08:56:22
WHERE MATCH(name) AGAINST('well-known' IN BOOLEAN MODE)
AND RLIKE '[[:<:]]well-known[[:>:]]'FULLTEXT比LIKE快;LIKE比RLIKE快。
问题出在FULLTEXT的例外情况(短词、停用词等)。如果可行,让你的应用程序查看搜索词来决定是使用这个FULLTEXT AND技巧还是使用Paul的LIKE AND技巧。
行动迟缓的原因是...在原始查询(只有RLIKE)中,必须读取每一行,并且必须扫描每个name中的“文本”。
FULLTEXT更快(可能快得多),因为它可以使用索引直接转到包含“文本”的行。
LIKE比RLIKE更快,因为算法更简单。(但它仍然必须获取每个name。)
https://stackoverflow.com/questions/49213760
复制相似问题