我有一个数据库中引用的缓存文件列表,并希望清除超出大小限制的最旧值,即20,000,000。
表格简单如下:
[ hash | filesize | timestamp ]
目前只运行以下命令,
SELECT `hash`, `filesize` FROM `cachetable` ORDER BY `timestamp` DESC;
然后从外部处理结果。有没有办法获得超出20,000,000限制的结果列表?
答案 0 :(得分:1)
我使用OFFSET
SELECT `hash`, `filesize`
FROM `cachetable`
ORDER BY `timestamp` DESC
LIMIT <your_limit_here>
OFFSET 20000000;
请务必使用您自己的可接受号码替换your_limit_here。
答案 1 :(得分:0)
我会在表格上使用binary search,并使用SUM
函数查看它何时超过阈值大小,例如SIZE(在您的情况下为20000000)
这样您就可以在log(N)查询中获得目标阈值,其中N是表中的总行数。 获得目标阈值后说出THRESHOLD,删除之后的所有行:
SELECT `hash`, `filesize`
FROM `cachetable`
ORDER BY `timestamp` DESC
LIMIT NUMBER_ROWS_TO_DELETE /* any large number to delete all after THRESHOLD */
OFFSET THRESHOLD;