当我运行这行代码时。
DELETE from monthlyevaluatedbudgettable where budgetforyear = 2018;
它只是在状态栏Query is Running.
中说,我认为它不会结束,所以我会取消它,然后在错误日志的消息中发出警告:
ERROR: canceling statement due to user request
CONTEXT: SQL statement "DELETE FROM ONLY "public"."monthlyadjustedbudgettable" WHERE $1 OPERATOR(pg_catalog.=) "budgetid""
********** Error **********
ERROR: canceling statement due to user request
SQL state: 57014
Context: SQL statement "DELETE FROM ONLY "public"."monthlyadjustedbudgettable" WHERE $1 OPERATOR(pg_catalog.=) "budgetid""
monthlyadjustedbudgettable
与ON DELETE CASCADE
之间monthlyevaluatedbudgettable
的关系182,095
。有人能告诉我会出现什么问题吗?
我在两个表中都有one-to-one
个记录。他们的关系是paperImageView.contentMode = .scaleAspectFill
。
答案 0 :(得分:1)
您应该首先尝试在当前查询中使用EXPLAIN
来详细了解发生的情况。
我对您的删除查询速度如此之慢的预感是,您对ON DELETE CASCADE
有一个monthlyadjustedbudgettable
约束。这意味着对于monthlyevaluatedbudgettable
中的每条记录,必须在monthlyadjustedbudgettable
中进行检查,以查看是否还需要删除任何记录。由于该表上没有索引,因此可能会发生全表扫描。鉴于每张表中有大约200K条记录,这在所需时间方面可能非常大。
您可以尝试快速解决问题。您可以在monthlyadjustedbudgettable
:
CREATE UNIQUE INDEX budget_idx ON monthlyadjustedbudgettable (budgetid);
这假设monthlyadjustedbudgettable
中的外键列被称为budgetid
。