我在SQL的DELETE查询中遇到了一些麻烦。
我的工作数据库是(postgres 9.3),由两个表(父表和子表)组成。
子表通过外键与父表建立了关系。
父表:
CREATE TABLE parent
(
id bigint NOT NULL,
...
CONSTRAINT parent_pkey PRIMARY KEY (id)
)
子表
CREATE TABLE child
(
id bigint NOT NULL,
parent_id bigint,
...
CONSTRAINT child_pkey PRIMARY KEY (id),
CONSTRAINT fk_adc9xan172ilseglcmi1hi0co FOREIGN KEY (parent_id)
REFERENCES parent (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
我在两个表中都插入了200,000条没有任何关系的记录(Child.parent_id = NULL)。
但是像下面这样的DELETE查询需要超过20分钟的时间。 即使没有WHERE条件。
DELETE FROM Parent;
如果我不添加关系约束,执行时间将在400毫秒内完成。
我错过了什么?
下面是一个可行的解决方案示例。但我不知道这是否是一个好主意。也许有人可以告诉我更好的方法来做到这一点。
BEGIN WORK;
ALTER TABLE Parent DISABLE TRIGGER ALL;
DELETE FROM Parent;
ALTER TABLE Parent ENABLE TRIGGER ALL;
COMMIT WORK;