我有一张桌子,每分钟大约有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尖峰,每分钟像拇指一样突出.
我可以对查询进行任何优化以更有效地运行此查询吗?
与往常一样,您应该查看查询计划,并在此处发布.你这样做是通过发行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)
| 归档时间: |
|
| 查看次数: |
3121 次 |
| 最近记录: |