当前位置: 首页 > 知识库问答 >
问题:

mysql - MySQL的fulltext索引为什么比like慢这么多?

柯河
2023-08-27

表字段:id,content(text类型),content字段已添加fulltext索引,10万条数据,内容是用navicat生成的随机文本。
查询SQL如下:

select * from tb_text_100w where content like "%simply double-click it in the pane%";select * from tb_text_100w as a where match(a.content) against('"simply double-click it in the pane"');

第一条SQL:耗时13秒
第二条SQL:耗时189秒

我搞不懂为啥差距这么大,那fulltext索引的意义在哪里?

共有1个答案

尹兴生
2023-08-27

会不会是机器配置有点问题,在本地测试了一下,感觉速度提升还是非常多的。

# 创建了两个测试表CREATE TABLE `test_table` (  `id` int NOT NULL AUTO_INCREMENT,  `filename` varchar(255) NOT NULL,  `msg` text,  PRIMARY KEY (`id`),  FULLTEXT KEY `idx_msg` (`msg`)) ENGINE=InnoDB AUTO_INCREMENT=582145 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;CREATE TABLE `test_table2` (  `id` int NOT NULL AUTO_INCREMENT,  `filename` varchar(255) NOT NULL,  `msg` text,  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=582145 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;# 网上下了几本免费的英文电子书,写入到了数据库里面,两个表数据一样,都是1163200条数据。# 测试数据是这里下的:https://www.gutenberg.org/  ,txt格式的电子书,一行数据对应数据表里面的一条msg记录。select count(*) from test_table;select count(*) from test_table2;# 这两个 like 查询时间基本在 800ms 左右。是扫描了全表,查询的时候cpu占用很高,基本接近100%。select * from test_table where msg like '%corruption of Kotzebue%'; 大概 850ms 左右select * from test_table2 where msg like '%corruption of Kotzebue%'; 大概 750ms 左右select * from test_table where id = 348332;explain SELECT *FROM test_tableWHERE MATCH (msg) AGAINST ('"corruption of Kotzebue"' IN BOOLEAN MODE);# 使用fulltext索引查询,查询时间能降低到 10ms 以下SELECT *FROM test_tableWHERE MATCH (msg) AGAINST ('"corruption of Kotzebue"');
 类似资料:
  • 问题内容: 我正在使用较大的随机数作为密钥(来自另一个系统)。在相当小的表(如几百万行)上进行插入和更新所花费的时间比我认为合理的长得多。 我已经提炼了一个非常简单的测试来说明。在测试表中,我尝试使其尽可能简单。我的真实代码没有如此简单的布局,并具有关系和附加索引等。但是,更简单的设置将显示等效的性能。 结果如下: 在MyISAM中插入1M行需要6秒钟;进入InnoDB需要 3433秒 ! 我究竟

  • 问题内容: 我使用JDBC连接到MySQL。在时,一切正常。 但是,当我将应用程序移动到Intranet中的另一台计算机上并用于连接到MySQL数据库时,大约需要1分钟才能成功连接到MySQL。这是怎么回事? 问题答案: 好吧,这可能是DNS问题。您可以通过从配置文件中的选项开始禁用DNS主机名查找。 在这里阅读更多详细信息:http : //dev.mysql.com/doc/refman/5.

  • 问题内容: 从2010年的计算机语言基准游戏中可以看出: Go平均比C慢10倍 Go比Java慢3倍! 考虑到Go编译器会生成要执行的本机代码,这怎么可能? Go的编译器不成熟?还是Go语言存在一些内在问题? 编辑: 大多数答案否认Go语言的内在缓慢,声称问题出在不成熟的编译器中。 因此,我进行了一些自己的测试来计算斐波那契数:迭代算法在Go(freebsd,6g)中以与C(带有O3选项)一样的速

  • 问题内容: 这是所有编程语言所共有的吗?在进行多次打印后再执行println似乎更快,但是将所有内容移动到字符串中并仅进行打印似乎最快。为什么? 编辑:例如,Java可以在不到一秒钟的时间内找到所有高达100万的质数- 但要进行打印,然后在自己的println中将它们全部输出可能需要几分钟!最多可打印100亿小时! 例如: 问题答案: 速度并不慢,而是由主机操作系统提供的与控制台连接的基础。 您可

  • 问题内容: 我对此感到困惑 现在让我们来看看numpy: 神圣的CPU周期蝙蝠侠! 使用改进,但恕我直言仍然不够 numpy.version.version =‘1.5.1’ 如果您想知道在第一个示例中是否跳过了列表创建以进行优化,则不是: 问题答案: Numpy已针对大量数据进行了优化。给它一个很小的3长度数组,毫不奇怪,它的性能很差。 考虑单独的测试 输出是 似乎是数组的归零一直花费在nump