首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL SELECT 語句執行順序詳解:11 步驟虛擬表流程

     編輯:MySQL 綜合教學

MySQL SELECT 語句執行順序詳解:11 步驟虛擬表流程

SQL 聲明式語言,但執行有嚴格順序。理解順序有助於編寫高效查詢、排查邏輯錯誤。MySQL 執行 11 個階段,每階段產生一張虛擬表(VT),最終 VT 返回客戶端。

11 步驟順序與虛擬表

  1. FROM:對左/右表做笛卡爾積 → VT1。
  2. ON:VT1 按連接條件過濾 → VT2。
  3. JOIN:外連接補回未匹配行 → VT3;多表循環 1-3。
  4. WHERE:VT3 按條件過濾 → VT4。
  5. GROUP BY:VT4 分組 → VT5。
  6. CUBE / ROLLUP:超級聚合 → VT6。
  7. HAVING:VT6 分組後過濾 → VT7。
  8. SELECT:投影選列 → VT8。
  9. DISTINCT:去重 → VT9。
  10. ORDER BY:排序 → VT10。
  11. LIMIT:取指定行 → VT11(最終結果)。

關鍵洞見

  • WHERE 在 GROUP BY 前:無法用聚合函數,需用 HAVING。
  • SELECT 在 GROUP BY/HAVING 後:SELECT 別名不可用於 WHERE/GROUP BY/HAVING(MySQL 允許但不標準)。
  • DISTINCT 在 ORDER BY 前:去重後再排序。
  • LIMIT 最後:配合 ORDER BY 實現分頁。
  • 缺少子句則跳過對應步驟。

實戰案例:分頁優化

錯誤:SELECT * FROM huge_table ORDER BY id LIMIT 1000000, 10(掃描 100 萬行再丟棄)。
優化:SELECT * FROM huge_table WHERE id > (SELECT id FROM huge_table ORDER BY id LIMIT 1000000, 1) ORDER BY id LIMIT 10(延遲關聯,利用覆蓋索引快速定位偏移量)。

執行計劃對比

EXPLAIN SELECT ...  -- 查看 optimizer 實際執行順序(非邏輯順序)
-- 關注:id、select_type、table、type、possible_keys、key、key_len、ref、rows、Extra
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved