EXPLAIN ANALYZE 會真的執行查詢

EXPLAIN 只跑到規劃那一步就停下來給你計畫。EXPLAIN ANALYZE 會把查詢真的執行一遍——那些 actual time 和 actual rows 就是這樣來的。

對 SELECT 沒差。對寫入語句資料真的會變:

EXPLAIN ANALYZE DELETE FROM orders WHERE ...;   -- ❌ 資料真的被刪掉了
EXPLAIN ANALYZE UPDATE users SET ...;           -- ❌ 真的被改了

安全做法是包在交易裡回滾:

BEGIN;
EXPLAIN ANALYZE DELETE FROM orders WHERE ...;
ROLLBACK;

計畫照樣印給你,資料回到原狀。

兩個指令的分工

跑到哪你得到什麼
EXPLAIN規劃完就停只有估計值——它打算怎麼做
EXPLAIN ANALYZE真的執行估計值 + 事實,兩者可以對照

所以要判斷 估計和實際差很多,代表資料庫對這張表的認識壞了 這件事,非得用 ANALYZE 不可——光看 EXPLAIN 只有估計值,沒有東西可以對照。