前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >聚簇索引和非聚簇索引

聚簇索引和非聚簇索引

作者头像
Li_XiaoJin
发布2022-06-10 21:24:43
6900
发布2022-06-10 21:24:43
举报
文章被收录于专栏:Lixj's BlogLixj's Blog

关于聚簇索引和非聚簇索引的内容。

聚簇索引不是一种单独的索引类型,而是一种数据存储方式。将数据存储与索引放到了一块,找到索引也就找到了数据。

非聚簇索引也叫二级索引,将数据存储与索引分开结构,索引结构的叶子节点指向了数据的对应行地址,通过地址才能找到对应的数据。

InnoDB 中,在聚簇索引之上创建的索引称之为辅助索引,辅助索引访问数据总是需要二次查找,非聚簇索引都是辅助索引,像组合索引、前缀索引、唯一索引,辅助索引叶子节点存储的不再是行的物理位置,而是主键值。

当表有聚簇索引时,它的数据行实际存放在索引的叶子节点中。

聚簇索引默认是主键,如果没有定义主键,InnoDB 会选择一个唯一的非空索引代替。如果没有这样的索引,InnoDB 会隐式的定义一个主键来作为聚簇索引。InnoDB 只聚集在同一个页面的记录。

聚簇索引的优缺点, 优点:

  1. 可以把数据保存到一起。较少磁盘 I/O 的次数;
  2. 数据访问更快。数据和索引保存在同一个节点上,获取速度比非聚簇索引要快;
  3. 使用覆盖索引扫描的查询可以直接使用页节点的主键值。

缺点:

  1. 如果数据全部放在内存中,聚簇索引的优势就不明显了;
  2. 插入速度严重依赖于插入顺序。按照主键的顺序插入就加载数据到 InnoDB 表中最快的方式;如果不上按照主键顺序插入,加载完成后最好使用 OPTIMIZE TABLE 命令重新组织一下表;
  3. 更新聚簇索引的代价很高;
  4. 基于聚簇索引插入新行,或者主键被更新导致需要移动行的时候,可能面临“页分裂”的问题;
  5. 聚簇索引可能导致全表扫描变慢,尤其是行比较稀疏,或者由于行分裂导致数据存储不连续的情况;
  6. 二级索引可能比想象更大,因为在二级索引的叶子节点包含了引用行的主键列;
  7. 二级索引访问需要两次索引查找,而不是一次;

聚簇索引的每个叶子节点都包含了主键值、事务 ID、用于事务和 MVCC 的回滚指针以及所有的剩余列。如果主键是一个列前缀索引,InnoDB 也会包含完整的主键列和剩下的其他列。

使用 InnoDB 时应该尽可能地按照主键顺序插入数据,并且尽可能地使用单调增加的聚簇键的值来插入新行。

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可 Links: https://lixj.fun/archives/聚簇索引和非聚簇索引

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-04-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档