這是我嘗試在查詢刪除行所以我有一個最大行限制
DELETE FROM table ORDER BY dateRegistered DESC LIMIT 1000 *
我想在我已經設計了一個腳本來運行這樣的查詢做解釋了。每次發現第1001條記錄或更高的舊記錄時,刪除
因此,您可以設置最大行大小,但刪除所有較舊的記錄。
實際上有沒有辦法在CREATE語句中設置它。
因此:如果我在數據庫中有9023行,當我運行該查詢應該刪除8023行,讓我用1000
這是我嘗試在查詢刪除行所以我有一個最大行限制
DELETE FROM table ORDER BY dateRegistered DESC LIMIT 1000 *
我想在我已經設計了一個腳本來運行這樣的查詢做解釋了。每次發現第1001條記錄或更高的舊記錄時,刪除
因此,您可以設置最大行大小,但刪除所有較舊的記錄。
實際上有沒有辦法在CREATE語句中設置它。
因此:如果我在數據庫中有9023行,當我運行該查詢應該刪除8023行,讓我用1000
立即發生,我唯一的辦法這個確切的工作是手動做。
首先,鎖定桌子。當你這樣做時,你不希望行數改變。 (如果鎖不適合你的應用程序實用,你必須制定出一個更聰明的排隊系統,而不是使用此方法。)
接下來,獲取當前行數:
SELECT count(*) FROM table
一旦你有這個,你應該用簡單的數學能夠找出需要刪除的行數。假設它說1005 - 你需要刪除5行。
DELETE FROM table ORDER BY dateRegistered ASC LIMIT 5
現在,解鎖表格。
如果鎖不適合您的方案實用,你就必須更聰明一點 - 例如,選擇所有需要刪除的行的唯一ID,並預約了漸進刪除。我會讓你自己工作:)
如果你有一個唯一的行ID這裏是理論上正確的方法,但它不是非常有效(即使你有一個索引在dateRegistered
列):
DELETE FROM table
WHERE id NOT IN (
SELECT id FROM table
ORDER BY dateRegistered DESC
LIMIT 1000
)
我認爲你會按照日期,而不是行數,直接限制了DELETE
更好。
我不認爲有一種方法可以在CREATE TABLE
聲明中進行設置,至少不是便攜式聲明。
哦,我喜歡這個。我傾向於偏離子查詢,因爲它們通常效率低下,但乍看起來似乎更加高效,尤其是因爲它不必爲每行重新運行。 – Matchu 2010-01-20 20:32:36
是的,但是如果你知道我的意思,那將會刪除1000行......並且不會留下1000行。讓我試着編輯這些問題 – 2010-01-20 20:19:09
啊,我明白了。嗯... – Matchu 2010-01-20 20:20:32
是的,你是正確的ASC ...我的大腦無法正常工作 – 2010-01-20 20:21:00