實測環境:26 萬筆資料、43 欄位表 demo_jobs_store,對比 SELECT * 與指定欄位的回應時間,結果驚人。
| 查詢方式 | 欄位數 | 耗時 | 倍數 |
|---|---|---|---|
SELECT col1 | 1 | 7.7 秒 | 1x (基準) |
SELECT col1, col2 | 2 | 15 秒 | ~2x |
SELECT col1..col10 | 10 | 29 秒 | ~3.8x |
SELECT * | 43 | 預估 > 120 秒 | > 15x |
join_buffer_size、sort_buffer_size 等按行大小分配,寬行導致記憶體壓力大、甚至落磁碟。SELECT * 無法利用覆蓋索引,必須回表讀取完整行。SELECT id, name, created_at FROM users。select 子句或 @EntityGraph 避免全欄位載入。SELECT *。EXPLAIN 掃描慢查詢日誌,發現 SELECT * 立即優化。「SELECT * 是懶惰的代名詞」,在生產環境是效能殺手,請從代碼審查階段就嚴格禁止。