为什么PG的delete慢

ref: https://www.postgresql.org/message-id/[email protected]

场景:

要删除的表articlesarticles中有一个字段是表comments的外键,即:

CREATE TABLE articles (
  id integer PRIMARY KEY,
  content text
);

CREATE TABLE comments (
  content text,
  article_id integer,
  FOREIGN KEY (article_id) REFERENCES articles (id)
);

最简单的办法就是在确认没有错误的情况下,disable trigger,删完后再打开。但是还有一种可能性就是在删除的时候PG会去关联的表中查找有没有关联的记录,本例中就是在删除articles中的东西时会在comments中按article_id查找,如果article_id在此时没有加索引,而且comments和articles表中都有大量数据的时候,就会出现很慢的情况。解决方案就是给comments表中的article_id加上index

CREATE INDEX ON comments (article_id);

你可能感兴趣的:(为什么PG的delete慢)