小编gen*_*sis的帖子

为什么在 MySQL 中的 FULLTEXT 索引上 LIKE 比 MATCH...AGAINST 快 4 倍多?

我不明白这个。

我有一个包含这些索引的表

PRIMARY     post_id
INDEX       topic_id
FULLTEXT    post_text
Run Code Online (Sandbox Code Playgroud)

表有(仅)346 000 行。我正在尝试执行 2 个查询。

SELECT post_id 
FROM phpbb_posts 
WHERE topic_id = 144017 
AND post_id != 155352 
AND MATCH(post_text) AGAINST('http://rapidshare.com/files/5494794/photo.rar')
Run Code Online (Sandbox Code Playgroud)

需要 4.05 秒,而

SELECT post_id 
FROM phpbb_posts 
WHERE topic_id=144017 
AND post_id != 155352 
AND post_text LIKE ('%http://rapidshare.com/files/5494794/photo.rar%')
Run Code Online (Sandbox Code Playgroud)

需要 0.027 秒。

EXPLAIN 显示唯一的区别在于可能的键(fulltext包含 post_text,LIKE不包含)

这真的很奇怪。

这背后是什么?后台发生了什么?LIKE不使用索引时怎么会这么快,而使用它的索引时 FULLTEXT怎么会这么慢?

更新1:

实际上现在大约需要 0.5 秒,也许表被锁定了,但是,当我打开分析时,它显示 FULLTEXT INITIALIZATION 花了 0.2 秒。这是怎么回事?

我可以LIKE每秒 10 倍的速度查询我的表格,而全文只有 2 倍

更新2:

惊喜!

mysql> SELECT …
Run Code Online (Sandbox Code Playgroud)

mysql full-text-search

12
推荐指数
1
解决办法
4万
查看次数

标签 统计

full-text-search ×1

mysql ×1