mysql - 为什么 MySQL LIKE 比 FULLTEXT 更快?

标签 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)

使用全文:

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

我读过很多教程,其中解释了为什么应该使用 FULLTEXT(因为这实际上是按索引搜索的)。但是,这是一种比 LIKE 语句更慢的数据检索方式(因为 LIKE 语句必须遍历每条记录才能返回其有效性)?

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

最佳答案

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

    开头的值
  • 如果 test_title 是一个数值(INT、FLOAT 等),那么 LIKEFULLTEXT 都是糟糕的方法做查询。

  • 给定 INDEX(tst_title)(它是 VARCHARTEXT),然后 LIKE可能运行得更快,因为它只需要检查所有以 1 开头的条目。

  • 您列出的计时闻起来像是查询缓存接管了。出于计时目的,请使用 SELECT SQL_NO_CACHE ... 来避免 QC。

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

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

  • 表是MyISAM吗?还是 InnoDB? FULLTEXT 中的差异可能会影响此线程。

关于mysql - 为什么 MySQL LIKE 比 FULLTEXT 更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32370119/

相关文章:

Javascript:按特定字段获取所有对象

performance - 为什么使用外部循环比使用内部循环更快地迭代外部维度?

mysql - 满足3NF的数据库设计

php - 当包含在 ajax 调用中时,我的 href 链接不起作用

php - 如何在 php 中使用字符串作为数学计算的公式?

sql - 随机选择数据库

c# - Dapper 带有 sql 查询动态参数

mysql - 即使第二个表上的行不存在也右连接

javascript - 随着游戏的进行,游戏循环出现滞后

python - Openshift django-mysql 数据库不包含表?