我與camera_activities
名稱的表,有超過百萬的在記錄越多,表結構就像刪除數百萬的記錄
CREATE TABLE camera_activities
(
id serial NOT NULL,
camera_id integer NOT NULL,
access_token_id integer,
action text NOT NULL,
done_at timestamp with time zone NOT NULL,
ip inet,
extra json,
camera_exid text,
name text
)
WITH (
OIDS=FALSE
);
ALTER TABLE camera_activities
OWNER TO 8hhjhjgghg7;
-- Index: camera_activities_camera_id_done_at_index
-- DROP INDEX camera_activities_camera_id_done_at_index;
CREATE UNIQUE INDEX camera_activities_camera_id_done_at_index
ON camera_activities
USING btree
(camera_id, done_at);
和一個記錄是像
這是問題所在,
我希望在2016年前將刪除所有記錄,他們將會是如此之多,範圍是在2014年之間等等,我們開始在2014年添加數據..
我試過了一個簡單的查詢,它的效果很好,例如,如果我刪除2個日期作爲
delete from camera_activities where done_at>'2017-07-12 10:55:37+00' and done_at<='2017-07-13 09:23:00+00
這工作,但它的很多費時,有超過百萬的記錄,有沒有快速的方法來完成這項工作?
注意:如果我可能會將日期範圍增加到一個月或超過一個月,則查詢會繼續運行,並且不會返回任何結果。
任何幫助或指導將有所幫助,
關於您想要保存多少個值?所以我想大約在2016年之後有多少價值? – yanman1234
您可以創建新表,從現有表中複製所需的所有內容,然後刪除舊錶。 – fen1x
我正在建議fen1x說什麼,你會'截斷'比'delete'快得多的舊錶,但這隻有在數據少於刪除時纔有意義。 – yanman1234