专栏首页用户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技术引擎内幕》

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 啥?!BM25 比语义向量检索效果好?

    虽然以SentenceBERT为代表的语义向量检索展现出了超越传统的以BM25为代表的稀疏向量检索的性能,但是还没有人研究过索引量和向量维数对稠密向量检索性能的...

    NewBeeNLP
  • tf.sparse

    张量流将稀疏张量表示为三个独立的稠密张量:指标、值和dense_shape。在Python中,为了便于使用,这三个张量被收集到一个SparseTensor类中。...

    狼啸风云
  • 【学术】一篇关于机器学习中的稀疏矩阵的介绍

    AiTechYun 编辑:Yining 在矩阵中,如果数值为0的元素数目远远多于非0元素的数目,并且非0元素分布无规律时,则称该矩阵为稀疏矩阵;与之相反,若非0...

    AiTechYun
  • 索引入门:顺序索引

    之前我对索引的了解基本就是主索引和二级索引,此外还经常见到一些其他概念,如聚集索引和非聚集索引,稀疏索引和密集索引等,今天系统整理一下。

    Apache IoTDB
  • tf.SparseTensor

    定义在:tensorflow/python/framework/sparse_tensor.py.

    狼啸风云
  • 趣学Python数据分析:轴和索引

    上一篇总结了Python数据处理包Pandas的DataFrame,介绍了Axes相关的属性和方法。文章的图形展示效果不是很友好,再换一种形式。

    double
  • 稀疏索引与其在Kafka和ClickHouse中的应用

    在以数据库为代表的存储系统中,索引(index)是一种附加于原始数据之上的数据结构,能够通过减少磁盘访问来提升查询速度,与现实中的书籍目录异曲同工。索引通常包含...

    Spark学习技巧
  • python的高级数组之稀疏矩阵

    具有少量非零项的矩阵(在矩阵中,若数值0的元素数目远多于非0元素的数目,并且非0元素分布没有规律时,)则称该矩阵为稀疏矩阵;相反,为稠密矩阵。非零元素的总数比上...

    py3study
  • 【CTR】DeepGBM:知识蒸馏技术在微软在线预测系统中的应用

    今天学习的是微软 2019 年的工作《DeepGBM: A Deep Learning Framework Distilled by GBDT for Onli...

    阿泽 Crz
  • elasticsearch之Roaring Bitmaps的结构

    如果你是刚刚接触搜索引擎,你可能会感到奇怪,构建搜索引擎中存储块的一个很重要的原因是搜索引擎能够有效地压缩和快速解码有序的数字集合。 为什么这个很有用?你可能知...

    开发架构二三事
  • Google AI与Deepmind强强联合,推出新工具加速神经网络稀疏化进程

    神经网络具有的推理功能,使得许许多多实时应用变为可能——比如姿态估计和背景模糊。这些应用通常拥有低延迟的特点,并且还具有隐私意识。

    新智元
  • CVPR2021: Sparse R-CNN新的目标检测模型

    今天我们将讨论由四个机构的研究人员提出的一种方法,其中一个是字节跳动人工智能实验室。他们为我们提供了一种新的方法,称为Sparse R-CNN(不要与 Spa...

    deephub
  • HAWQ + MADlib 玩转数据挖掘之(五)——奇异值分解实现推荐算法

    一、奇异值分解简介         奇异值分解简称SVD(singular value decomposition),可以理解为:将一个比较复杂的矩阵用更小更简...

    用户1148526
  • 干货 | 一图胜千言: 解读阿里的Deep Image CTR Model

    AI 科技评论按:本文作者石塔西,原载于知乎,雷锋网已获授权。本文是对阿里的论文《Image Matters: Visually modeling user b...

    AI科技评论
  • 陶哲轩之后,有人在这个猜想的证明之路上又前进了一步

    埃尔德什等差数列猜想(Erdős conjecture on arithmetic progressions),又称埃尔德什 - 图兰猜想(Erdős-Tura...

    机器之心
  • CodeVIO:紧耦合神经网络与视觉惯导里程计的稠密深度重建(ICRA2021 Best Paper Finalist)

    大家好!在这篇文章里我将为大家简要介绍我们在ICRA2021上发表的论文"CodeVIO: Visual-Inertial Odometry with Lear...

    3D视觉工坊
  • ElasticSearch性能优化官方建议

    ES是设计成一个搜索引擎的,只擅长返回匹配查询较少文档,如果需要返回非常多的文档需要使用Scroll。

    cutd
  • tf.parse_single_example

    对于稠密张量,返回的张量与parse_example的输出相同,除了没有批处理维数,输出形状与dense_shape中给出的形状相同。

    狼啸风云
  • tf.io.parse_single_example()

    类似parse_example,除了:对于稠密张量,返回的张量与parse_example的输出相同,除了没有批处理维数,输出形状与dense_shape中给出...

    狼啸风云

扫码关注云+社区

领取腾讯云代金券