MySQL 的 ORDER BY 子句支援多字段排序,通過逗號分隔多個排序鍵,每個鍵可獨立指定升序(ASC)或降序(DESC)。掌握多字段排序規則,能精確控制結果集順序,滿足複雜業務需求。
SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式, 字段2 排序方式, ...
ASC(升序,默認)或 DESC(降序)-- 寫法 1:明確指定(推薦,可讀性強)
ORDER BY f1 ASC, f2 DESC
-- 寫法 2:省略 ASC(等效,但不易讀)
ORDER BY f1, f2 DESC -- 注意:DESC 僅作用於 f2,f1 默認 ASC
ORDER BY f1 DESC, f2 DESC -- 必須各自指定 DESC
-- 按銷量降序,銷量相同按價格升序,價格相同按上架時間降序
SELECT * FROM products
ORDER BY sales_volume DESC, price ASC, created_at DESC;
ORDER BY 一致,避免 Using filesortSELECT 列與 ORDER BY 列均在同一索引中,可直接通過索引返回數據LIMIT 使用,減少排序開銷結合 CASE WHEN 或布爾表達式實現自定義優先級:
-- 將狀態為 '推薦' 的商品置頂,其餘按時間倒序
SELECT * FROM products
ORDER BY (status = '推薦') DESC, created_at DESC;
多字段排序的核心在於「先後順序」與「方向獨立」。實際開發中,務必結合 EXPLAIN 檢查是否產生 filesort,通過索引優化排序性能,確保查詢高效穩定。