我试图优化我的 MySQL 查询,但发现我实际上做错了。我已将查询从使用更改为
SELECT * FROM test WHERE tst_title LIKE '1%'
收件人:
SELECT * FROM `test` WHERE MATCH(tst_title) AGAINST("+1*" IN BOOLEAN MODE)
对于 FULLTEXT,运行时非常糟糕。请看下面:
像这样使用:
Showing rows 0 - 24 (1960 total, Query took 0.0004 sec)
使用全文:
Showing rows 0 - 24 (1960 total, Query took 0.0033 sec)
我读过很多教程,其中解释了为什么应该使用 FULLTEXT(因为这实际上是按索引搜索的)。但是,这是一种比 LIKE 语句更慢的数据检索方式(因为 LIKE 语句必须遍历每条记录才能返回其有效性)?
我真的无法弄清楚为什么会发生这种情况。在优化方面的帮助会得到很多帮助!
最佳答案
除非您将 min_word_len 设置为小于默认值的数字,否则
开头的值FULLTEXT
无法找到所有以1
如果
test_title
是一个数值(INT、FLOAT 等),那么LIKE
和FULLTEXT
都是糟糕的方法做查询。给定
INDEX(tst_title)
(它是VARCHAR
或TEXT
),然后LIKE
可能运行得更快,因为它只需要检查所有以1
开头的条目。您列出的计时闻起来像是查询缓存接管了。出于计时目的,请使用
SELECT SQL_NO_CACHE ...
来避免 QC。如果您分别使用
MATCH
或LIKE
而没有FULLTEXT
或INDEX
,则查询别无选择,只能扫描表中的所有行。1960 total
来自哪里?时间是否包括计算?表是MyISAM吗?还是 InnoDB?
FULLTEXT
中的差异可能会影响此线程。
关于mysql - 为什么 MySQL LIKE 比 FULLTEXT 更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32370119/