我有一个看似简单的删除:
DELETE FROM table WHERE added_at < '2017-08-14'
Run Code Online (Sandbox Code Playgroud)
在具有 ~20k 行(w ~10k 受影响行)的表上,但它已经运行了 2000+ 秒。
SELECT * FROM table WHERE added_at < '2017-08-14'
Run Code Online (Sandbox Code Playgroud)
需要几毫秒。
我还有其他一些带有FOREIGN KEYs 的表,id并且我有一些以前的记录指向它,但是它们已经被删除了。
我试图:
VACUUM如果你有
create table "table"(
id integer primary key,
added_at date
);
create table other(
other_id integer primary key,
table_id integer,
foreign key (table_id) references "table" (id)
);
Run Code Online (Sandbox Code Playgroud)
并且您从“表”中删除行 postgres 必须在另一个表中搜索您在“表”中删除的每一行。如果在其他表中添加索引 postgres 可以在索引中搜索。
CREATE INDEX ON other (table_id);
Run Code Online (Sandbox Code Playgroud)
现在您可以有效地删除“表”中的行。
| 归档时间: |
|
| 查看次数: |
3823 次 |
| 最近记录: |