为什么MySQL比全文更快?
我试图优化我的MySQL查询,但发现我实际上做错了。我已将我的查询从使用为什么MySQL比全文更快?,mysql,sql,performance,optimization,phpmyadmin,Mysql,Sql,Performance,Optimization,Phpmyadmin,我试图优化我的MySQL查询,但发现我实际上做错了。我已将我的查询从使用 SELECT * FROM test WHERE tst_title LIKE '1%' 致: 而对于全文来说,运行时非常糟糕。。见下文: 使用LIKE: Showing rows 0 - 24 (1960 total, Query took 0.0004 sec) 使用全文: Showing rows 0 - 24 (1960 total, Query took 0.0033 sec) 我读过很多教程,其中解释了为
SELECT * FROM test WHERE tst_title LIKE '1%'
致:
而对于全文来说,运行时非常糟糕。。见下文:
使用LIKE:
Showing rows 0 - 24 (1960 total, Query took 0.0004 sec)
使用全文:
Showing rows 0 - 24 (1960 total, Query took 0.0033 sec)
我读过很多教程,其中解释了为什么应该使用全文(因为这实际上是通过索引进行搜索)。但是,这是一种检索数据的较慢方式,然后是LIKE语句(因为LIKE语句必须遍历每个记录才能返回其有效性)
我真的搞不懂为什么会发生这种事。。在优化方面的帮助会很受欢迎 据我所知,如果您使用的是像“%1%”这样的
…tst_tile
,这会比较慢,因为它必须执行完整的表扫描,并且没有索引。您当前使用的右边带有通配符的索引可以使用索引,这可能是它比使用全文更快的原因
我自己也不太确定,但这是我读到的,希望能有所帮助
编辑:
您可能想阅读此答案,了解全文与类似内容的完整解释
FULLTEXT
无法找到以1
开头的所有值test\u title
是一个数值(INT、FLOAT等),那么LIKE
和FULLTEXT
都是很糟糕的查询方式索引(tst_title)
(它是VARCHAR
或TEXT
),那么像
一样可能运行得更快,因为它只需要检查以1
开头的所有条目选择SQL\u NO\u缓存…
以避免QCMATCH
或LIKE
而没有全文
或索引
,则查询别无选择,只能扫描表中的所有行全文
中存在差异,这可能会影响此线程你可以参考这篇文章了解一些想法>@Mathew谢谢你的链接,尽管使用两个通配符,LIKE比全文快。使用LIKE“%1%”给了我更多的行和更快的运行时间。您是否也尝试过使用CONTAINS并将其与LIKE和FULLTEXT进行比较?我尝试过,但运行时间变得更糟。似乎是最快的,只使用一个通配符。我不知道为什么,但是,我包括了一个链接到另一个与你的问题非常相似的问题,第一个答案深入描述了没有真正的性能改进。这是一本有趣的书。很抱歉,我无法提供进一步的见解。我已经阅读了它,但谢谢你的链接。现在我自己做一些研究。希望我能找到一种方法来优化我的查询。为了回答您的所有问题,是的,我的表是InnoDB,并且将变量min_word_len设置为1。我还尝试禁用QC,但时间差仍然较慢。除此之外,我还想提到数据类型是VARCHAR。我现在将试用INDEX()函数。注:1960年,我们是受影响的行,包括“1”。我假设您设置了
innodb\u ft\u min\u token\u size
。1960年发生了什么<代码>SQL\u计算\u找到\u行?单独的计数(*)
?还有别的吗?表中有多少行?
Showing rows 0 - 24 (1960 total, Query took 0.0033 sec)