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

MySQL 索引優化 ORDER BY 實戰:從單表到複雜聯合查詢

     編輯:MySQL 資料庫相關知識

建立索引五大原則

  1. 合理索引加速讀取,濫用拖慢寫入
  2. 索引越多,UPDATE/INSERT/DELETE 越慢
  3. 優先在 MyISAM(B-Tree)使用,InnoDB 需權衡事務支援
  4. SQL/架構優化到極致仍有瓶頸,再考慮 Memcached 等分散式緩存
  5. 養成 EXPLAIN 分析執行計劃的習慣

常見錯誤

❌ 在 SELECT 欄位(id/title/content)建索引 → 無效
✅ 在 WHERE/ORDER BY 條件欄位(如 cat_id)建索引 → 高效

四大 ORDER BY 優化場景

1. ORDER BY + LIMIT

SELECT col1, col2 FROM tbl ORDER BY sort_col LIMIT offset, limit;
-- 優化:sort_col 建單列索引

2. WHERE + ORDER BY + LIMIT

SELECT ... FROM tbl WHERE colX = val ORDER BY sort_col LIMIT ...;
-- 優化:建聯合索引 (colX, sort_col)

3. WHERE + IN + ORDER BY + LIMIT

SELECT ... FROM tbl WHERE colX IN (v1,v2,...) ORDER BY sort_col LIMIT ...;
-- 聯合索引 (colX, sort_col) 此處失效(Using where; Using filesort)
-- 嘗試 UNION 拆分 + 索引,實測效率反而更低
-- 建議:強制使用排序索引 FORCE INDEX

4. 避免在 ORDER BY 使用表達式/函數

-- ❌ 無法用索引
SELECT * FROM tbl ORDER BY YEAR(date) LIMIT 0,30;
-- ✅ 改用覆蓋索引或冗餘欄位

5. 多欄位排序索引順序陷阱

SELECT * FROM tbl WHERE uid=1 ORDER BY x,y LIMIT 0,10;
-- 直覺索引 (x,y,uid) ❌
-- 最佳索引 (uid,x,y) ✅  -- MySQL 排序機制決定

每次加索引後必須 EXPLAIN 驗證!

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