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 只有估計值,沒有東西可以對照。