首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL SELECT * vs SELECT 具體欄位效能實測:26 萬筆資料、43 欄位下的 4 倍效能差距

     編輯:MySQL 資料庫相關知識

實測環境:26 萬筆資料、43 欄位表 demo_jobs_store,對比 SELECT * 與指定欄位的回應時間,結果驚人。

實測數據

查詢方式欄位數耗時倍數
SELECT col117.7 秒1x (基準)
SELECT col1, col2215 秒~2x
SELECT col1..col101029 秒~3.8x
SELECT *43預估 > 120 秒> 15x

效能差距根因

  1. 網路傳輸量:多傳輸不需欄位資料,頻寬佔用線性增長。
  2. 解析/序列化開銷:Server 端組裝行資料、Client 端反序列化耗時隨欄位數增長。
  3. 緩衝區壓力:join_buffer_size、sort_buffer_size 等按行大小分配,寬行導致記憶體壓力大、甚至落磁碟。
  4. 覆蓋索引失效:SELECT * 無法利用覆蓋索引,必須回表讀取完整行。

最佳實務鐵律

  • ✅ 永遠明確列出需要的欄位:SELECT id, name, created_at FROM users。
  • ✅ ORM 框架配置 select 子句或 @EntityGraph 避免全欄位載入。
  • ✅ 僅在「確實需要所有欄位」的極少數場景 (如備份腳本、全表同步) 使用 SELECT *。
  • ✅ 定期 EXPLAIN 掃描慢查詢日誌,發現 SELECT * 立即優化。

「SELECT * 是懶惰的代名詞」,在生產環境是效能殺手,請從代碼審查階段就嚴格禁止。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved