首页 > 其他分享 >聚簇索引、回表与覆盖索引

聚簇索引、回表与覆盖索引

时间:2024-02-04 18:11:26浏览次数:26  
标签:辅助 覆盖 聚簇 回表 索引 主键

聚簇索引一般指的是主键索引(如果存在主键索引的话)。

作为一个正常开发,建表时主键肯定是必须的。

而即使如果表中没有定义主键,InnoDB 会隐式选择一个唯一的非空索引代替。

所以我们就直接含糊点说:

聚簇索引就是主键索引!其余的都是非聚簇索引。

那到底什么是聚簇索引,什么是非聚簇索引

聚簇就是扎一堆儿。

聚簇索引就是将数据存储与索引放到了一块,找到索引也就找到了数据

在 innodb 中,在聚簇索引之上创建的索引称之为辅助索引,非聚簇索引都是辅助索引,像复合索引、前缀索引、唯一索引。

辅助索引叶子节点存储的不再是行的物理位置,而是主键值。辅助索引访问数据总是需要二次查找

而这个二次查找的过程我们给它起个名字就叫做:回表

而可以想象,回表就意味着更多磁盘IO,也就意味着慢。

也就是说回表并不是我们想见到的东西。

如何避免回表

那就要说到覆盖索引,从名字上也应该可以猜出什么是覆盖索引了。

你不是不想二次查询吗?那就直接一次查询。

那怎么能一次就查出来?索引覆盖!

什么是索引覆盖

就是把单列的非主键索引修改为多字段的联合索引,在一棵索引树上就找到了想要的数据,不需要去主键索引树上,再检索一遍这个现象,称之为索引覆盖

当然这样也会导致索引的存储空间,相当于以空间换时间,实际开发中需要自己做取舍。


文章推荐:

● 师爷,翻译翻译什么叫AOP

终于搞懂动态代理了!

● 学会@ConfigurationProperties月薪过三千

● 0.o?让我看看怎么个事儿之SpringBoot自动配置

● 不是银趴~是@Import!

● Java反射,看完就会用

标签:辅助,覆盖,聚簇,回表,索引,主键
From: https://www.cnblogs.com/cosimo/p/18006745

相关文章

  • 【DM】根据指定字符分割字符串,返回表
    一、创建记录CREATEORREPLACETYPETYPE_ROW_SPLITSTRASOBJECT(idINT,valNVARCHAR(500));二、创建嵌套表CREATEORREPLACETYPETYPE_TABLE_SPLITSTRisTABLEOFTYPE_ROW_SPLITSTR;三、自定义函数CREATEORREPLACEFUNCTIONsplitTable(strvalINTEXT......
  • 聊聊ClickHouse MergeTree引擎的固定/自适应索引粒度
    ​ 前言我们在刚开始学习ClickHouse的MergeTree引擎时,就会发现建表语句的末尾总会有SETTINGSindex_granularity=8192这句话(其实不写也可以),表示索引粒度为8192。在每个datapart中,索引粒度参数的含义有二:每隔index_granularity行对主键组的数据进行采样,形成稀疏索引,并存储......
  • B+树索引的基本原理
    索引键:B+树索引的每个节点存储了数据表中一行或多行的索引键(即用于排序和查找的列的值)。叶子节点:B+树的叶子节点包含了指向数据表中具体行的指针(或者直接包含行数据,取决于索引的实现方式),这些行的索引键值与叶子节点中的键相对应。非叶子节点:B+树的非叶子节点(包括根节点)用于指导搜索......
  • Mysql中索引的描述设计
    Mysql中索引的描述设计1,索引是占用存储空间的2,my_myisam.myi和account.ibd存放索引3,查询效率提高,增删改效率降低;索引表以查询为主索引结构 二叉树结构一个根节点下只能有两个节点,当子节点比根节点小在左侧,当比根节点大在二叉树右侧缺点:大数据量时,检索慢,如果都比根节点小会......
  • c# 8.0特性索引和范围
    在阅读代码时碰到以下语法vartype=topic["DevModel/Query/".Length..];其中topic为string,主要疑惑Lenght后面的..查找资料发现为8.0新语法,主要新增了两种语法,官方解释如下使用索引和范围探索数据范围-C#|MicrosoftLearn也有一些其他博主的文章C#8.0特性篇之索引和......
  • informer cache自定义索引
    informercache默认通过namespace/name作为key把对象保存到map中。条件查询时一般通过labels.Selector来过滤,但这需要遍历所有元素,informercache可以类似于MySQL那样建立索引,来提高查询速度。//map根据指定的key来给对象分类//IndexFuncknowshowtocomputethesetofind......
  • 目录索引 & 密码提示
    好像是该干些整理活了。算法笔记可能等以后修。线下比赛记录thuwc2023:梦想:拿到了一等约,接下来还要进省队。GDKOI2023:现实:进一步怀疑自己的能力。CSP2023&NOIP2023:没有写记录,信心逐渐动摇。中考:面对:已弃坑,想来挺可惜的。密码是一模排名,一个三位数。GDOI2023游记:惊醒:密码......
  • MySQL建索引报错:BLOB/TEXT column used in key specification without a key length
    MySQL建索引报错:BLOB/TEXTcolumnusedinkeyspecificationwithoutakeylength因为text类型的字段值太长,没办法为全部内容建立索引,只能指定前多少位字符建立索引;就像这样createindex`索引名`on表名(字段名(600));所以能用varchar能放下的尽量使用varchar吧......
  • 索引和函数视图及存储过程
    索引和函数视图及存储过程1.索引在数据库中索引最核心的作用是:加速查找1.1索引原理为什么加上索引之后速度能有这么大的提升呢?因为索引的底层是基于B+Tree的数据结构存储的很明显,如果有了索引结构的查询效率比表中逐行查询的速度要快很多且数据量越大越明显数据库的索......
  • C#(9):字段,属性,索引器
    函数体中的变量是局部变量字段的修饰符属性是为了简略字段的set()get()方法而发明的,可以起到同样的避免直接使用字段赋值来暴露数据的问题将属性封装成(refactory)属性方法的方法:ctrl+re只读方法只有get(){}而没有set(){}注意:只读方法属性和privateset(){}的区别,只读属性......