索引是一个独立的、有序的数据结构(InnoDB 中是 B-tree),它让 MySQL 无需扫描整张表就能找到行。没有索引时,一次查找会读取每一行(全表扫描);有了索引,只需在树上走几步。
主键 vs 二级索引
在 InnoDB 中,表本身就是主键索引 —— 一个聚簇索引(clustered index)。行按主键顺序物理存储,因此主键查找会直接命中完整的行。
二级索引是以其他列为键的独立 B-tree。它的叶子节点存储被索引的值加上主键,所以使用二级索引常常要付出第二次查找的代价("回到聚簇索引",即回表)来取回行的其余部分。
sql
users (
id ,
email (),
city ()
);
INDEX idx_city users (city);
users city ;
users email ;
