在我的應用程式中,我從 PostgreSQL 資料庫中的子表和父表中洗掉。我按以下順序洗掉:
DELETE FROM answers_reports_t WHERE event_reports_id in (
SELECT id FROM events_reports_t WHERE recall_id = :recallId)"
DELETE FROM events_reports_t WHERE recall_id = :recallId
該表answers_reports_t是一個子表,其外鍵event_reports_id參考父表的events_reports_t.id.
多個答案屬于一個事件,大小比例約為 3:1。目前,answers_reports_t有 280K 行和events_reports_t95K。
我注意到 delete #2 始終比 delete #1 慢,即使差異很小。這是來自應用程式的日志。
ANSWERS Delete: 41ms
EVENTS Delete: 58ms
ANSWERS Delete: 41ms
EVENTS Delete: 59ms
ANSWERS Delete: 41ms
EVENTS Delete: 67ms
索引如下。

我期待相反的表現。另外,是否有可能以某種方式組合此父子洗掉,以進一步優化性能?
uj5u.com熱心網友回復:
另外,是否有可能以某種方式組合此父子洗掉,以進一步優化性能?
是的,可以使用資料修改 CTE在單個陳述句中執行此操作,但我懷疑它的速度要快得多
with report_delete as (
DELETE FROM events_reports_t
WHERE recall_id = 2
returning id
)
DELETE FROM answers_reports_t
WHERE event_reports_id in (select id from report_delete);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/348633.html
標籤:sql PostgreSQL
下一篇:PostgreSQLpg_constraint的confupdtype/confdeltype列使用未記錄的字母(空格)。這是什么意思?
