删除超过15分钟的所有条目

Mic*_*see 7 mysql performance

我有一张桌子,每分钟大约有10-15k个参赛作品.每个人在进入时都标有当前时间戳.该表是一个MEMORY表,因为丢失数据不是问题.

每一分钟,我都有一个运行以下查询的脚本:

DELETE FROM tracker WHERE post_time < DATE_SUB(NOW(), INTERVAL 15 MINUTE)
Run Code Online (Sandbox Code Playgroud)

这个查询大约需要1-2秒才能运行,这也不错,但似乎这种类型的查询(删除早于以前的所有内容X)在对MEMORY表运行时应该能够更快地执行.它也有相应的CPU尖峰,每分钟像拇指一样突出.

我可以对查询进行任何优化以更有效地运行此查询吗?

nos*_*nos 6

与往常一样,您应该查看查询计划,并在此处发布.你这样做是通过发行EXPLAIN DELETE FROM tracker WHERE post_time < DATE_SUB(NOW(), INTERVAL 15 MINUTE)

现在,问题可能是DELETE查询无法使用索引,并且必须循环遍历所有行.

即使您已经有post_time索引,也可能不会使用它,因为默认情况下MEMORY表上的索引是哈希索引.散列索引只能用于等式检查,而不能用于等级post_time < DATE_SUB(NOW(), INTERVAL 15 MINUTE)

在post_time列上创建BTREE索引,

CREATE INDEX post_time_idx ON tracker (post_time) USING BTREE;
Run Code Online (Sandbox Code Playgroud)