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

MySQL 索引使用實戰分析:InnoDB vs MyISAM 執行計畫對比

     編輯:MySQL 資料庫相關知識

建立結構相同的 user (InnoDB) 與 user2 (MyISAM) 表,各插入 10 萬筆測試資料,透過 EXPLAIN 深度剖析不同儲存引擎下的索引選擇差異。

測試表結構

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) DEFAULT NULL,
  `email` varchar(100) DEFAULT NULL,
  `age` tinyint(4) DEFAULT NULL,
  `nickname` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `email` (`email`),
  KEY `name` (`name`),
  KEY `age` (`age`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- user2 同結構,ENGINE=MyISAM

關鍵觀察結果

單一主鍵範圍查詢:id > 100

  • InnoDB (user):使用 PRIMARY 索引,預估掃描 65,954 列(實際 131,513)
  • MyISAM (user2):未使用索引,採全表掃描,預估 131,608 列(實際 131,509)

→ InnoDB 聚簇索引特性使主鍵範圍查詢極高效;MyISAM 優化器在大範圍查詢時傾向全表掃描。

複合條件查詢:id > 100 AND age > 50 / age = 50

圖3-4 InnoDB執行計畫 圖5-6 MyISAM執行計畫

  • InnoDB 能結合主鍵與 age 索引(index merge 或 ref)
  • MyISAM 同樣退回全表掃描

核心結論

  1. InnoDB 聚簇索引設計使主鍵查詢極具優勢
  2. MyISAM 在大範圍查詢時優化器較保守,易放棄索引
  3. 實際生產環境必須用 EXPLAIN 驗證執行計畫,不可假設索引一定會被使用
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved