表字段: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索引的意义在哪里?
会不会是机器配置有点问题,在本地测试了一下,感觉速度提升还是非常多的。
# 创建了两个测试表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秒 ! 我究竟
这个sql查询要6s多,但是我两张表数据量都不是很大呀。box_api_data目前40000条,box_data_info目前10006条。基本都是比较少的,这么个数据量连接查询居然干到了6s,是我sql有问题吗?目前两张表都没有索引。
问题内容: 我使用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亿小时! 例如: 问题答案: 速度并不慢,而是由主机操作系统提供的与控制台连接的基础。 您可