为什么MySQL LIKE比FULLTEXT更快?

时间:2015-09-03 08:02:23

标签: mysql sql performance optimization phpmyadmin

我试图优化我的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)

使用FULLTEXT:

Showing rows 0 - 24 (1960 total, Query took 0.0033 sec)

我已经阅读了许多教程,其中他们解释了为什么你应该使用FULLTEXT(因为这实际上是通过索引搜索)。但是,如何以较慢的方式检索数据,然后是LIKE语句(因为LIKE语句必须遍历每条记录才能返回其有效性)?

我几乎无法弄清楚为什么会发生这种情况。优化方面的帮助很多!

2 个答案:

答案 0 :(得分:1)

  • 除非您将min_word_len设置为小于默认值的数字,否则FULLTEXT无法找到以1开头的所有值

  • 如果test_title是数值(INT,FLOAT等),则LIKEFULLTEXT都是执行查询的可靠方法。

    < / LI>
  • 鉴于INDEX(tst_title)VARCHARTEXT),LIKE可能会运行得更快,因为它只需检查所有条目与1

  • 您列出的时间气味就像查询缓存接管一样。出于计时目的,请使用SELECT SQL_NO_CACHE ...来避免质量控制。

  • 如果您分别使用MATCHLIKE而没有FULLTEXTINDEX,则查询别无选择,只能扫描表格中的所有行

  • 1960 total来自哪里?时机是否包括计算?

  • 表是MyISAM吗?还是InnoDB? FULLTEXT中存在可能会影响此主题的差异。

答案 1 :(得分:0)

从我所读过的内容来看,如果您使用...tst_tile LIKE '%1%',这将会更慢,因为它必须执行全表扫描并且没有索引。您当前使用右侧通配符的那个可以使用索引,这可能是它比使用FULLTEXT更快的原因。

我自己也不太确定,但这是我读到的,希望它有所帮助。

编辑: 可能希望阅读此答案here以获取有关FULLTEXT与LIKE

的完整说明