MySQLSELECT語句完整語法遠超ANSI SQL-92標準,包含多項MySQL專屬擴展。本文拆解完整語法結構,解析四大擴展關鍵字用途與適用場景。
SELECT [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [HIGH_PRIORITY]
[DISTINCT | DISTINCTROW | ALL] select_list
[INTO {OUTFILE | DUMPFILE} 'file_name' export_options]
[FROM table_references
[WHERE where_definition]
[GROUP BY col_name,...]
[HAVING where_definition]
[ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC],...]
[LIMIT [offset,] rows]
[PROCEDURE procedure_name]]
最簡SELECT select_list即可完成:
SELECT 1+1 → 返回2。SELECT @var := expr調用MySQL函數運算並賦值給變數。| 關鍵字 | 功能 | 適用場景與注意事項 |
|---|---|---|
STRAIGHT_JOIN | 強制優化器按FROM順序聯結表 | 優化器選擇非最佳聯結順序時使用;大多數情況無需指定 |
SQL_SMALL_RESULT | 告知優化器結果集極小 | 需搭配GROUP BY/DISTINCT;使用臨時表而非排序;與SQL_BIG_RESULT互斥 |
SQL_BIG_RESULT | 告知優化器結果集極大 | 需搭配GROUP BY/DISTINCT;使用排序而非臨時表 |
HIGH_PRIORITY | 賦予該查詢高於UPDATE的優先權 | 緊急唯讀查詢插隊執行;慎用避免阻塞寫入 |
DISTINCT / DISTINCTROW:結果集去除重複行,**NULL視為相等**(多個NULL僅保留一行)。ALL:預設行為,無去重效果,純屬語法糖。export_options語法同LOAD DATA INFILE的FIELDS/LINES子句。OUTFILE:正常匯出含欄位/行結束符。DUMPFILE:僅寫入單行原始資料,**無任何結束符**,適合匯出二進位大物件(BLOB)。四大擴展關鍵字用法晦澀且具侵入性,**絕大多數生產環境查詢完全不需要使用**。優化器通常已能產生最佳計畫;僅在經EXPLAIN驗證確有效能瓶頸時,才考慮作為最後手段干預。