# 慢查詢記錄

本頁說明 `query()` 內建的慢查詢記錄：計時範圍、輸出格式與它不記錄的資訊。

## 行為

所有 SQL 都經過 `query()` 執行（`src/MySQLPool.ts:362-392`）。執行耗時超過 20ms 時，以 `console.log` 輸出一行：

```text
[Slow Query: 37ms] [SELECT * FROM `users` WHERE `status` = ?]
```

| 項目 | 說明 |
|---|---|
| 門檻 | 20ms（大於 20 才記錄） |
| 計時範圍 | 從呼叫 `pool.getConnection()` 前開始，到結果回來為止；包含等待空閒連線的排隊時間 |
| 輸出內容 | 耗時與帶 `?` 佔位符的 SQL，**不含**綁定值 |
| 輸出位置 | `console.log`（stdout） |

## 判讀

因為計時包含取得連線的時間，連線池滿載時即使 SQL 本身很快也會被記錄。大量出現慢查詢時先確認：

| 現象 | 可能原因 |
|---|---|
| 同一條 SQL 時快時慢，負載高時集中出現 | 連線池排隊，考慮調高 `connectionLimit`（見 [設定](/zh/configuration)） |
| 特定 SQL 一直超過門檻 | SQL 本身慢，以 `EXPLAIN` 檢查索引 |

## 相關頁面

- [原生 SQL](/zh/raw-sql)
- [架構](/zh/architecture)
