WHERE 決定回傳幾列,索引才決定要看過幾列
WHERE project_id = X決定的是回傳多少列(也就是分成幾頁)。它沒有減少資料庫要看過多少列。
沒有索引時,資料庫不知道哪些列屬於這個專案,只能整張表逐筆檢查、逐筆比對 project_id——這是 full table scan。條件再精準,掃描量仍然是整張表。
索引才是那個「不用看過全部」的機制:它讓資料庫直接定位到 project_id = X 的那一段,掃描量從表的大小降成符合條件的列數。
讀 query 時要分開的兩個量
| 量 | 由什麼決定 | 影響 |
|---|---|---|
| 回傳幾列(rows returned) | WHERE / LIMIT | 網路傳輸、記憶體 |
| 看過幾列(rows examined) | 索引 | 資料庫的實際工作量 |
效能問題幾乎都出在第二個量。「我有加 WHERE 啊」不是效能論證——要看執行計畫確認它真的走了索引。