您好,欢迎来到华佗小知识。
搜索
您的当前位置:首页MYSQL:聚簇索引和主键索引

MYSQL:聚簇索引和主键索引

来源:华佗小知识
MYSQL:聚簇索引和主键索引

聚簇索引和主键索引

聚簇索引并不是⼀种单独的索引类型,⽽是⼀种数据存储⽅式,具体细节依赖于其实现⽅式。MySQL数据库中innodb存储引擎,B+树索引可以分为:聚簇索引(也称聚集索引,clustered index)

辅助索引(有时也称⾮聚簇索引或⼆级索引,secondary index,non-clustered index)。这两种索引内部都是B+树,聚集索引的叶⼦节点存放着⼀整⾏的数据。

InnoDB聚簇索引和主键索引

Innobd中的主键索引是⼀种聚簇索引,

⾮聚簇索引都是辅助索引,像复合索引、前缀索引、唯⼀索引。InnoDB中,表数据⽂件本⾝就是按B+Tree组织的⼀个索引结构,

聚簇索引就是按照每张表的主键构造⼀颗B+树,同时叶⼦节点中存放的就是整张表的⾏记录数据,也将聚集索引的叶⼦节点称为数据页。这个特性决定了索引组织表中数据也是索引的⼀部分;

⼀般建表会⽤⼀个⾃增主键做聚簇索引,没有的话MySQL会默认创建,但是这个主键如果更改代价较⾼,故建表时要考虑⾃增ID不能频繁update这点。

我们⽇常⼯作中,根据实际情况⾃⾏添加的索引都是辅助索引,辅助索引就是⼀个为了需找主键索引的⼆级索引,现在找到主键索引再通过主键索引找数据。

Innodb通过主键聚集数据,如果没有定义主键,innodb会选择【⾮空】的唯⼀索引代替。如果没有这样的索引,innodb会隐式的定义⼀个主键来作为聚簇索引。

聚簇索引的优缺点  优点:

    1.数据访问更快,因为聚簇索引将索引和数据保存在同⼀个B+树中,因此从聚簇索引中获取数据⽐⾮聚簇索引更快    2.聚簇索引对于主键的排序查找和范围查找速度⾮常快  缺点:

    1.插⼊速度严重依赖于插⼊顺序,按照主键的顺序插⼊是最快的⽅式,否则将会出现页,严重影响性能。因此,对于InnoDB表,我们⼀般都会定义⼀个⾃增的ID列为主键

    2.更新主键的代价很⾼,因为将会导致被更新的⾏移动。因此,对于InnoDB表,我们⼀般【定义主键为不可更新】。    3.⼆级索引访问需要两次索引查找,第⼀次找到主键值,第⼆次根据主键值找到⾏数据。

辅助索引(⾮聚簇索引)

  在聚簇索引之上创建的索引称之为辅助索引,辅助索引访问数据总是需要⼆次查找。

辅助索引叶⼦节点存储的不再是⾏的物理位置,⽽是主键值。通过辅助索引⾸先找到的是主键值,再通过主键值找到数据⾏的数据页,再通过数据页中的Page Directory找到数据⾏。

  Innodb辅助索引的叶⼦节点并不包含⾏记录的全部数据,叶⼦节点除了包含键值外,还包含了相应⾏数据的聚簇索引键。

  辅助索引的存在不影响数据在聚簇索引中的组织,所以⼀张表可以有多个辅助索引。在innodb中有时也称辅助索引为⼆级索引。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务