我与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