我在 MySQL 中有一个名为 的表,messages如下所示:
id (primary key) | description | created_at(timestamp)
Run Code Online (Sandbox Code Playgroud)
该表应该保存我的应用程序用户之间的聊天消息。因此,对它的写操作次数会很高。
该应用程序有一个 API,可返回两个时间戳之间的所有消息。这个查询也很常见,但少于写操作的次数。
我用 100 个并发连接和该表中的大约 15000 行运行 mysqlslap,总时间约为 8.6 秒。
然后我在 上添加了一个二级索引created_at,希望在两次搜索之间在更短的时间内获得结果,但是对于相同的输入,我增加了 0.3 秒。
为什么我没有看到显着的性能提升?
编辑:
这是我的桌子的样子:
DROP TABLE IF EXISTS `mssg`;
CREATE TABLE `mssg` (
`id` INTEGER NULL AUTO_INCREMENT DEFAULT NULL,
`body` MEDIUMTEXT NULL DEFAULT NULL,
`length` VARCHAR NULL DEFAULT NULL,
`created_at` TIMESTAMP NULL DEFAULT NULL,
PRIMARY KEY (`id`)
);
Run Code Online (Sandbox Code Playgroud)
这就是我添加索引的方式:
ALTER TABLE testalter_tbl ADD INDEX (created_at);
Run Code Online (Sandbox Code Playgroud)
通常,select 语句会返回大约 150 到 350 条消息