我有一個數據庫中引用的緩存文件列表,並希望清除最大的大小超過20,000,000的大小限制。MySQL - 當總和小於x時選擇
表簡單地看起來是這樣的:
[ hash | filesize | timestamp ]
在剛運行以下命令的那一刻,
SELECT `hash`, `filesize` FROM `cachetable` ORDER BY `timestamp` DESC;
然後處理結果外。是否有任何方法可以獲得超過20,000,000限制的結果列表?
我有一個數據庫中引用的緩存文件列表,並希望清除最大的大小超過20,000,000的大小限制。MySQL - 當總和小於x時選擇
表簡單地看起來是這樣的:
[ hash | filesize | timestamp ]
在剛運行以下命令的那一刻,
SELECT `hash`, `filesize` FROM `cachetable` ORDER BY `timestamp` DESC;
然後處理結果外。是否有任何方法可以獲得超過20,000,000限制的結果列表?
我會用桌子上一個binary search和SUM
功能看,當它超過閾值大小,說SIZE(2000萬在你的情況)
這樣您就可以在log(N)查詢中獲得目標閾值,其中N是表中的總行數。 獲得目標閾值後說閾值,之後刪除所有行:
SELECT `hash`, `filesize`
FROM `cachetable`
ORDER BY `timestamp` DESC
LIMIT NUMBER_ROWS_TO_DELETE /* any large number to delete all after THRESHOLD */
OFFSET THRESHOLD;
我會使用OFFSET
SELECT `hash`, `filesize`
FROM `cachetable`
ORDER BY `timestamp` DESC
LIMIT <your_limit_here>
OFFSET 20000000;
一定要與自己接受的更換次數your_limit_here。
嗨歡呼聲,問題是,雖然每個文件的大小不同,我不想讓20,000,000個文件,但總不是怎麼過的許多文件那大小 – 2013-03-18 08:32:05
所以你只想保留X文件WHERE SUM(文件大小)<20 000 000? – 2013-03-18 08:44:17
哎歡呼藏漢,如上 – 2013-03-18 08:32:27
指出@DominicEngland見更新的回答同樣的問題 – DhruvPathak 2013-03-18 08:42:47