正在載入工具…

看估計與實測,先把單位分清楚。EXPLAIN / 09

沿著計畫樹,找到 rows 的落差。

檢視既有 PostgreSQL EXPLAIN JSON,逐一對照節點、loops 與來源。這是觀察工具,不是自動 SQL 最佳化。

資料不上傳不連資料庫不執行 SQL

01 / 貼上既有計畫

範例皆為人工合成的 PostgreSQL-shaped fixture,不是真實資料庫量測或效能基準。

只接受一個 statement 的原生 JSON array wrapper。最多 1,000,000 UTF-16 字碼單元(非 bytes)、2,000 節點、32 層計畫。PostgreSQL 12–18 常用欄位子集,不偵測伺服器版本。原始計畫、關聯名稱與條件可能含秘密,請留意螢幕分享。

貼上 JSON,或先載入合成範例。

計畫是觀察依據,不是最佳化成果。

只讀既有輸出,不連資料庫、不執行查詢、不建立索引。節點 rows 差距可能值得檢查,但本頁不推論因果、瓶頸或改善效果;無法驗證資料來源或是否真的使用 ANALYZE。

PostgreSQL 12–18 欄位子集、單位與限制
  • 只接受單一 statement 的 [{"Plan":{…}}];不接受裸 Plan、文字/YAML/XML、其他資料庫格式或多 statement。不偵測 PostgreSQL 版本,也不宣稱支援每種 extension。每節點必須有非空白 Node Type;Plans 必須是合法節點陣列。
  • 提取 Node Type、Relation Name、Schema、Alias、Parent Relationship、Plans、Startup/Total Cost、Plan Rows、Actual Rows/Loops、Actual Startup/Total Time 與下列 buffers。其他欄位只計數並提示省略,不回傳原始物件。Plan Width、Parallel Aware、Workers、JIT、Triggers、Filter、join/index-specific details 目前也不分析。
  • Startup/Total Cost 是 planner 單位,不是 ms。Actual Rows、Actual Startup/Total Time 是每 loop 平均;timing 為 ms。Rows × loops 與 Total Time × loops 僅在兩者存在且 loops>0 時計算近似值,不能當作全查詢 wall-clock,也不是 exclusive time。Statement Planning/Execution Time 獨立顯示,不用節點加總代替。
  • 所有節點都有有效 Actual Rows+Actual Loops 才標為「具 ANALYZE rows/loops」;TIMING OFF 也可能符合,缺時間不補造。有任一 actual 欄位或 statement Execution Time,但配對不完整時標「部分實測」。完全沒有這些證據才標「只有 EXPLAIN」。這是欄位分類,不是執行參數認證。缺值維持 null/absent,明示未知,不補零。
  • PostgreSQL 18 以前,Actual Rows 的每 loop 平均會四捨五入為整數;PG18 可輸出小數。本頁不偵測版本。若為 PG ≤17 的整數四捨五入,rows × loops 與真實總 rows 的誤差最多 0.5 × loops:100000 loops 即最多 50000 rows。顯示為 0 仍可能隱藏每 loop <0.5 rows,乘積不是精確真實總數。節點時間若依 3 位小數四捨五入,time × loops 的誤差最多 0.0005 × loops ms;100000 loops 即最多 50 ms。
  • 估計與每 loop actual 顯示值都為正時,factor=較大值÷較小值;≥10 倍標示低估/高估。Plan Rows=0 或 Actual Rows 顯示為 0 有獨立狀態,不顯示無限倍;兩者顯示皆零且 loops>0 視為顯示值相同,不保證真實 rows 為零。Loops=0 為未執行,保留原始零值但不計算乘積或誤差;缺值或衍生溢位不假設結果。
  • 數值須有限且非負;loops/block counters 須 safe integer,rows/cost/time 可為小數。字串、null、boolean、負數、非有限值均報錯。Startup 大於 Total 報不一致。缺 Startup Cost/Total Cost/Plan Rows 會提示不完整;可有局部欄位錯誤但保留結構,不可冒稱整份通過。
  • Buffers:Shared/Local Hit、Read、Dirtied、Written Blocks;Temp Read/Written Blocks;I/O Read/Write Time 與 Shared/Local/Temp I/O Read/Write Time。Blocks 是原始 counters,I/O Time 為原始 ms;不乘 loops、不合併父子。沒有提供的 key 不補零。
  • 本機上限:1,000,000 UTF-16 字碼單元、96 層 JSON containers、10,000 containers、2,000 plan 節點、32 plan 層。字串內括號不算 container;包含將省略的資料也受限制。結構/資源錯誤不顯示截斷樹當完整結果;JSON 錯誤不回顯解析器原文。
  • JSON Pointer 是來源位置/節點 ID,例如 /0/Plan/Plans/0,不是原始行號或跨版本身份。來源按鈕選取原始值;缺漏欄位回到最近存在的父層,不杜撰位置。標準 JSON.parse 重複 key 以最後一個值為準;本頁不是重複 key 偵測器。編輯或重跑會重設節點選取。

免登入、不上傳、不永久保存、不放入分享 URL。編輯、清除、重新整理或離開會丟棄輸入與結果。你主動下載的靜態報告是例外;分享前請檢查名稱與欄位內容。

Cloudflare Web Analytics 僅統計頁面瀏覽與效能;工具輸入、檔案內容與處理結果留在你的裝置。