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

MySQL 查詢語句執行順序深度解析

     編輯:Java 綜合教學

SQL 執行順序 vs 撰寫順序

MySQL 查詢處理共 11 階段,每階段產生一張虛擬表作為下一階段輸入,最終結果為最後一張虛擬表。理解真實執行順序是優化複雜查詢的關鍵。

11 階段執行流程

  1. FROM:確定資料來源,執行 JOIN、衍生表
  2. ON:JOIN 條件過濾
  3. JOIN:外部連接補齊未匹配行
  4. WHERE:行級過濾(無法使用別名)
  5. GROUP BY:分組聚合
  6. HAVING:分組後過濾(可用聚合函數、別名)
  7. SELECT:投影列、計算表達式、別名定義
  8. DISTINCT:去重
  9. ORDER BY:排序(可用 SELECT 別名)
  10. LIMIT:分頁截取

MySQL 執行順序圖解

關鍵推論與優化啟示

  • WHERE 不能用 SELECT 別名:WHERE 在 SELECT 之前執行
  • HAVING 可用別名:HAVING 在 SELECT 之後
  • GROUP BY 隱含排序:MySQL 5.7+ 預設不再隱含排序,需顯式 ORDER BY
  • LIMIT 最後執行:先完成所有運算再截取,大偏移量效能差,建議用覆蓋索引 + 子查詢優化
  • JOIN 驅動表選擇:小表驅動大表,利用索引

實戰案例

-- 錯誤:WHERE 使用別名
SELECT id, name AS n FROM user WHERE n = 'Tom'; -- Unknown column 'n'

-- 正確:用子查詢或重複表達式
SELECT * FROM (SELECT id, name AS n FROM user) t WHERE n = 'Tom';
-- 或
SELECT id, name AS n FROM user WHERE name = 'Tom';

掌握執行順序,能寫出正確且高效的 SQL。

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