Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么MySQL比全文更快?_Mysql_Sql_Performance_Optimization_Phpmyadmin - Fatal编程技术网

为什么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) 我读过很多教程,其中解释了为

我试图优化我的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)
我读过很多教程,其中解释了为什么应该使用全文(因为这实际上是通过索引进行搜索)。但是,这是一种检索数据的较慢方式,然后是LIKE语句(因为LIKE语句必须遍历每个记录才能返回其有效性)


我真的搞不懂为什么会发生这种事。。在优化方面的帮助会很受欢迎

据我所知,如果您使用的是像“%1%”这样的
…tst_tile
,这会比较慢,因为它必须执行完整的表扫描,并且没有索引。您当前使用的右边带有通配符的索引可以使用索引,这可能是它比使用全文更快的原因

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

编辑: 您可能想阅读此答案,了解全文与类似内容的完整解释
  • 除非将最小单词长度设置为比默认值小的数字,
    FULLTEXT
    无法找到以
    1
    开头的所有值

  • 如果
    test\u title
    是一个数值(INT、FLOAT等),那么
    LIKE
    FULLTEXT
    都是很糟糕的查询方式

  • 给定
    索引(tst_title)
    (它是
    VARCHAR
    TEXT
    ),那么
    一样可能运行得更快,因为它只需要检查以
    1
    开头的所有条目

  • 您列出的计时闻起来像是查询缓存接管了。出于计时目的,请使用
    选择SQL\u NO\u缓存…
    以避免QC

  • 如果分别使用
    MATCH
    LIKE
    而没有
    全文
    索引
    ,则查询别无选择,只能扫描表中的所有行

  • 1960年的总数是从哪里来的?时间安排包括计算吗

  • 桌子是MyISAM吗?还是InnoDB?
    全文
    中存在差异,这可能会影响此线程


  • 你可以参考这篇文章了解一些想法>@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)