建立結構相同的 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 > 100PRIMARY 索引,預估掃描 65,954 列(實際 131,513)→ InnoDB 聚簇索引特性使主鍵範圍查詢極高效;MyISAM 優化器在大範圍查詢時傾向全表掃描。
id > 100 AND age > 50 / age = 50

age 索引(index merge 或 ref)