「一分钟学Java」快速了解MySQL索引(二)
前提知识点
-
MySQL的
InnoDB
索引数据结构是B+树
-
主键索引叶子节点的值存储的就是MySQL的数据行,普通索引的叶子节点的值存储的是主键值
什么是聚簇索引
找到了索引就找到了需要的数据,那么这个索引就是聚簇索引,所以主键就是聚簇索引,修改聚簇索引其实就是修改主键。
聚簇索引将B+树的叶子结点存放行数据。
InnoDB的默认数据结构是聚簇索引。
主要注意,一般情况下主键会默认创建聚簇索引,且一张表只允许存在一个聚簇索引。
- 聚簇索引就是按照每张表的主键构造一颗B+树,同时叶子节点中存放的就是整张表的行记录数据,也将聚簇索引的叶子节点称为数据页。这个特性决定了索引组织表中数据也是索引的一部分,每张表只能拥有一个聚簇索引
- InnoDB通过主键聚集数据,如果没有定义主键,InnoDB会选择非空的唯一索引代替。如果没有这样的索引,InnoDB会隐式定义一个主键来作为聚簇索引
优点
数据访问更快
缺点
插入速度严重依赖插入顺序,故推荐将自增ID作为主键,避免因为插入数据导致频繁更新索引文件。
什么是非聚簇索引
索引的存储和数据的存储是分离的,如果找到了索引但没找到数据,需要根据索引上的值(主键)再次回表查询,这类索引就是非聚簇索引。
索引子节点中存的是数据地址,先查找到索引中保存的地址,再根据地址从数据文件中找到数据,
MyISAM的默认数据结构是非聚簇索引。