聚簇索引
聚簇索引定义:在InnoDB的聚簇索引的叶子节点存储的是行记录(其实是页结构,一个页包含多行数据),InnoDB必须要有至少一个聚簇索引。可以直接定位到行记录。
聚簇索引的类型:
(1)如果表定义了PK,则PK就是聚集索引;
(2)如果表没有定义PK,则第一个not NULL unique列是聚集索引;
(3)否则,InnoDB会创建一个隐藏的row_id作为聚集索引;
注释:row_id是InnoDB表中在没有默认主键的情况下会生成一个6字节空间的自动增长主键
非聚簇索引
普通索引(聚簇索引)也叫二级索引,除聚簇索引外的索引,即非聚簇索引。叶子节点中保存的不是指向行的物理指针,而是行的主键值。当通过二级索引查找行,存储引擎需要在二级索引中找到相应的叶子节点,获得行的主键值,然后使用主键去聚簇索引中查找数据行,这需要两次B-Tree查找。
InnoDB的普通索引叶子节点存储的是主键(聚簇索引)的值。
mysql> create table user(
-> id int(10) auto_increment,
-> name varchar(30),
-> age tinyint(4),
-> primary key (id),
-> index idx_age (age)
-> )engine=innodb charset=utf8mb4;
说明:id 字段是聚簇索引,age 字段是普通索引(二级索引,非聚簇索引)
insert into user(name,age) values(‘张三’,30);
insert into user(name,age) values(‘李四’,20);
insert into user(name,age) values(‘王五’

本文详细介绍了MySQL中InnoDB存储引擎的聚簇索引和非聚簇索引的概念及工作原理。聚簇索引的叶子节点存储行记录,而非聚簇索引叶子节点存储主键值。通过实例展示了查询过程中回表查询和索引覆盖的概念,强调了优化查询性能的重要性。并提供了优化全表COUNT查询和分页查询的索引覆盖策略。
最低0.47元/天 解锁文章
6562

被折叠的 条评论
为什么被折叠?



