Postgresql

獲取 EXPLAIN DELETE 的真實查詢計劃

  • May 16, 2021

我有一個執行很長時間的刪除查詢。我試著解釋一下:

EXPLAIN DELETE FROM matches
WHERE id = 1

我得到:

QUERY PLAN
Delete on matches  (cost=0.43..2.65 rows=1 width=6)
 ->  Index Scan using matches_pkey on matches  (cost=0.43..2.65 rows=1 width=6)
       Index Cond: (id = 1)

但這不可能是全部成本,因為在許多需要檢查的外鍵約束中都引用了這個表,而且我知道這個查詢需要 40 秒才能完成。

如何查看此類刪除查詢的總成本以及在完成之前需要進行的所有外鍵檢查?


我試過EXPLAIN (ANALYZE, BUFFERS)了,但是當查詢由於另一個表中的外鍵約束而中止時,它沒有向我顯示此資訊。它只顯示錯誤消息(“違反外鍵約束”),但沒有解釋獲得該錯誤消息所花費的時間。

它失敗是可以的(並且,根據我的邏輯,恢復整個事務),但我不希望這種失敗花費 2 毫秒而不是 40 秒。我已經解決了我的問題,但我仍然很好奇是否有可能獲得失敗查詢的成本。

你需要執行EXPLAIN (ANALYZE, BUFFERS).

請注意,這實際上會執行DELETE,因此請在事務中和ROLLBACK之後執行它。

這將向您顯示有關外鍵約束的資訊,除非它們被延遲,在這種情況下它們在送出時執行。

我仍然很好奇是否有可能獲得失敗查詢的成本。

在這種情況下,成本將介於索引掃描的成本(之後外鍵的觸發器開始)和總成本之間。這取決於是早發現還是晚發現衝突行。

引用自:https://dba.stackexchange.com/questions/291546