前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >稀疏索引和稠密索引你了解吗?

稀疏索引和稠密索引你了解吗?

作者头像
袁新栋-jeff.yuan
发布2020-10-10 15:13:52
4.3K4
发布2020-10-10 15:13:52
举报
文章被收录于专栏:用户4352451的专栏

背景

最近参加了一个面试,面试官先问了mysql的数据库的索引的底层数据接口,我回答了:平时都用的是innodb引擎,所以其底层的索引数据类型是B+树。面试官问我用没用过稀疏索引。当时就懵了,聚集索引,非聚集索引,主键索引,覆盖索引等等,我也没听过什么是稀疏索引。我反问了一下 面试官这个索引类型是mysql新出的吗,我不太了解也没有怎么用过,面试官模糊的给我回答了一下:一个占用空间小查询效率相对低,一个查询效率高,存储空间比较大,用法是在创建索引的时候进行设置参数。我坦白道:不清楚,下去了解一下。

稠密索引和稀疏索引

基本概念

  • 稠密索引: 在密集索引中,数据库中的每个搜索键值都有一个索引记录。这样可以加快搜索速度,但需要更多空间来存储索引记录本身。索引记录包含搜索键值和指向磁盘上实际记录的指针。
在这里插入图片描述
在这里插入图片描述
  • 稀疏索引: 在稀疏索引中,不会为每个搜索关键字创建索引记录。此处的索引记录包含搜索键和指向磁盘上数据的实际指针。要搜索记录,我们首先按索引记录进行操作,然后到达数据的实际位置。如果我们要寻找的数据不是我们通过遵循索引直接到达的位置,那么系统将开始顺序搜索,直到找到所需的数据为止。
在这里插入图片描述
在这里插入图片描述

Innodb底层存储数据

B+树索引的两种类型

    1. 聚集索引: 通过每张表的主键顺序进行存放,其叶子节点存放的是这张表的每行完整数据。也正是我们有时称呼的主键索引(对比一下稠密索引)
    1. 非聚集索引(辅助索引,二级索引): 其叶子节点并不包含行记录的全部数据,其叶子结点的数据包含书签和键值(用于创建索引的字段值),书签的作用是找与索引相对应的行数据。也就是对应聚集索引的主键值。你是否有想过对应的描述的索引值

关系

  1. 看完稀疏索引和稠密索引还有聚集索引和非聚集索引的概念,我们是否能看出他们有什么关系。
  2. 聚簇索引(主键索引)是稠密索引,因为主键索引是所有的值都不为空,每一个搜索码都会有对应的行记录。
  3. 非聚集索引是稀疏索引,非聚集索引有唯一索引,普通索引,复合索引。他们的特征就是不会为表得每个值创建搜索码,而是为单个或多个字段创建,且行记录的某些值可以为null。当我们的where条件不止单个条件的时候我们也会首先通过索引查找出来一批数据,然后进行顺序查找筛选,所以是完全复合稀疏索引的条件的。

优势

  1. 通过上面的了解,稀疏索引占用空间少,但是在查询的精确率上还是相对于稠密索引还是比较慢的,因为不需要顺序查找,还有回表。
  2. 稠密索引那就是相对来说比较快,因为他可以精确定位数据,但是占用的空间比较大。

总结脑图

在这里插入图片描述
在这里插入图片描述
  1. 数据库索引的名称感觉好多呀,各种一个索引类型感觉有好多名称,大概通过脑图描述一下。
了解过后感觉面试官说的也不正确,问mysql为什么要问稀疏索引??? 我挺疑问的。

参考

  • https://stackoverflow.com/questions/36808877/difference-between-sparse-index-and-dense-index
  • https://zhuanlan.zhihu.com/p/35811482
  • https://practice.geeksforgeeks.org/problems/what-is-dense-indexing-and-sparse-indexing
  • https://www.tutorialspoint.com/dbms/dbms_indexing.htm
  • 《mysql技术引擎内幕》
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/10/02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

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