MySQL - 当sum小于x时选择

时间:2013-03-18 08:25:24

标签: mysql

我有一个数据库中引用的缓存文件列表,并希望清除超出大小限制的最旧值,即20,000,000。

表格简单如下:

[ hash | filesize | timestamp ]

目前只运行以下命令,

SELECT `hash`, `filesize` FROM `cachetable` ORDER BY `timestamp` DESC;

然后从外部处理结果。有没有办法获得超出20,000,000限制的结果列表?

2 个答案:

答案 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)

  1. 找出表格中50%最新行的大小。
  2. 如果小于SIZE,则查询前75%的行,如果大于SIZE,则查询前25%的行。
  3. 每次将行集分成两行重复。
  4. 这样您就可以在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;