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

MySQL ORDER BY 實戰進階:ASC/DESC 範例、建表腳本、多欄位排序邏輯

     編輯:MySQL 資料庫相關知識

建表與測試資料

CREATE TABLE `mysql_order_by_test` (
  `uid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(80) NOT NULL,
  `sex` TINYINT(1) NOT NULL COMMENT '1=男, 2=女',
  PRIMARY KEY (`uid`),
  KEY `idx_uid` (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT INTO `mysql_order_by_test` (`name`, `sex`) VALUES
('張三', 1),
('李四', 2),
('王二麻子', 1);

排序結果對照

1. ASC 遞增(預設)

SELECT * FROM mysql_order_by_test ORDER BY uid ASC;
uidnamesex
1張三1
2李四2
3王二麻子1

2. DESC 遞減

SELECT * FROM mysql_order_by_test ORDER BY uid DESC;
uidnamesex
3王二麻子1
2李四2
1張三1

多欄位排序邏輯演示

新增測試資料:

INSERT INTO mysql_order_by_test (name, sex) VALUES
('陳五', 1),  -- uid=4
('趙六', 2);  -- uid=5

按 sex 升序,同 sex 內按 uid 降序

SELECT * FROM mysql_order_by_test ORDER BY sex ASC, uid DESC;
uidnamesex
5趙六2
4陳五2
2李四2
3王二麻子1
1張三1

解析:先將 sex=2(女)排前,sex=1(男)排後;同性別內 uid 大的在前。

索引加速驗證

EXPLAIN SELECT * FROM mysql_order_by_test ORDER BY uid ASC;
-- Extra: 無 Using filesort,使用 idx_uid 索引順序掃描

EXPLAIN SELECT * FROM mysql_order_by_test ORDER BY sex ASC, uid DESC;
-- Extra: Using filesort(因 sex 非索引前導欄)

優化建議

  • 頻繁按 sex, uid 排序 → 建立複合索引 INDEX idx_sex_uid (sex, uid)。
  • MySQL 8.0+ 可建立降序索引 INDEX idx_sex_uid_desc (sex ASC, uid DESC) 完美匹配。
  • 分頁查詢務必加 ORDER BY 確保結果穩定(無 ORDER BY 時分頁結果不確定)。

實際操作驗證排序邏輯,配合 EXPLAIN 觀察索引使用,是掌握 ORDER BY 的最快捷徑。

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