# Performance Optimization in PostgreSQL

## Explain & Explain Analyze

**Explain** giúp giải thích các bước thực hiện trong câu query là gì với các thông số về cost, rows, widths,...

```sql
EXPLAIN SELECT * FROM inventory_tbl;
```

*   **cost**: chi phí để thực hiện query. Nó là số lượng tính toán cần thiết để hoàn thành. Giá trị từ X đến Y.
    
    *   X thể hiện cost cần tiêu tốn để khởi động nhiệm vụ
        
    *   Y thể hiện các đơn vị tính toán cần thiết để hoàn thành nhiệm vụ
        
*   **rows**: số lượng rows mà Postgres nghĩ rằng nó cần scan để thực thi query.
    
*   **width**: độ rộng trung bình của mỗi rows sau khi thực thi query. Tính theo đơn vị byte của tất cả các column được select.
    

**Explain analyze** sẽ thực thi luôn chứ không chỉ là plan nữa. Do vậy, nên sử dụng trong transaction.

```sql
BEGIN;
EXPLAIN ANALYZE DELETE FROM inventory_tbl;
ROLLBACK;
```
