1.聚簇索引
一种数据存储方式,所有的用户数据都存在了叶子节点
索引即数据,数据即索引
特点:
1.根据主键值的大小排序
页内记录按主键大小排成单向链表
存放用户记录的项按按键大小排成双向链表
目录页分为不同层次,每一层次的页也按主键大小排成双向链表
2.B+树的叶子节点存储完整的用户记录
优点:
1.数据访问快,因为索引和数据保存在同个B+树种
2.主键的排序查找和范围查找快
3.查询一定范围数据时,数据紧密相连,减少io操作
缺点:
1.插入速度依赖于插入顺序 定义自增id作为主键
2.更新主键代价高 设置主键不可更新
3.二级索引访问需要两次索引查找
限制:
1.对于Mysql来说,只有innodb支持
2.每个表只能有一个
3.若没有主键,自动找非空唯一索引替代,若没有,隐式定义主键作为聚簇索引
4.主键尽量选用有序的顺序id
2.非聚簇索引(二级索引、辅助索引)
按照非主键字段c2作为索引
叶子节点存放c2+主键
目录项存放c2+页号而不是主键+页号
与聚簇索引不同:
1.非聚簇索引叶子节点存储的是数据位置而不是完整数据,不影响表的物理存储顺序
2.一个表可以有多个
3.dml操作效率高,查询效率低
若同时为多个列建立索引,如c2+c3,则称为联合索引
则先按c2排,c2相同按c3排