首页 > 其他分享 >2、关于索引的二次查询

2、关于索引的二次查询

时间:2023-09-14 11:00:33浏览次数:49  
标签:二次 聚集 查询 索引 键值 数据 主键

聚集索引 VS 非聚集索引(B+树)

超级详细讲解【字节跳动大佬】(MySQL索引-B+树(看完你就明白了) - 苍青浪 - 博客园 (cnblogs.com)

在上节介绍 B+ 树索引的时候,我们提到了图中的索引其实是聚集索引的实现方式。

那什么是聚集索引呢?在 MySQL 中,B+ 树索引按照存储方式的不同分为聚集索引和非聚集索引。

这里我们着重介绍 InnoDB 中的聚集索引和非聚集索引:

聚集索引(聚簇索引):以 InnoDB 作为存储引擎的表,表中的数据都会有一个主键,即使你不创建主键,系统也会帮你创建一个隐式的主键。

这是因为 InnoDB 是把数据存放在 B+ 树中的,而 B+ 树的键值就是主键,在 B+ 树的叶子节点中,存储了表中所有的数据。

这种以主键作为 B+ 树索引的键值而构建的 B+ 树索引,我们称之为聚集索引。

②****非聚集索引(非聚簇索引):以主键以外的列值作为键值构建的 B+ 树索引,我们称之为非聚集索引。

非聚集索引与聚集索引的区别在于非聚集索引的叶子节点不存储表中的数据,而是存储该列对应的主键,想要查找数据我们还需要根据主键再去聚集索引中进行查找,这个再根据聚集索引查找数据的过程,我们称为回表。

明白了聚集索引和非聚集索引的定义,我们应该明白这样一句话:数据即索引,索引即数据。

非聚集索引的二次查询问题

非聚集索引叶节点仍然是索引节点,只是有一个指针指向对应的数据块,此如果使用非聚集索引查询,而查询列中包含了其他该索引没有覆盖的列,那么他还要进行第二次的查询,查询节点上对应的数据行的数据。

在SQL Server里面查询效率如下所示,Index Seek就是索引所花费的时间,Key Lookup就是二次查询所花费的时间。可以看的出二次查询所花费的查询开销占比很大,达到50%。

img

在SQL Server里面会对查询自动优化,选择适合的索引,因此如果在数据量不大的情况下,SQL Server很有可能不会使用非聚集索引进行查询,而是使用聚集索引进行查询,即便需要扫描整个聚集索引,效率也比使用非聚集索引效率要高。

辅助索引:

如果是单列索引,那么索引记录里面就2个值,一个是索引列值,一个是索引列值对应的主键值。如果是三列索引,那么索引记录里面就4个值,前三个是索引列的值,而且索引列的顺序与索引声明的顺序一致,另外一个是索引列值对应的主键值。

解析详情(图文):https://www.cnblogs.com/aspwebchh/p/6652855.html

各类索引的使用场景 复合索引的优点和注意事项 - 大西瓜3721 - 博客园 (cnblogs.com)

标签:二次,聚集,查询,索引,键值,数据,主键
From: https://www.cnblogs.com/kkbk/p/17701921.html

相关文章

  • 1、查看索引命中情况
    --查看索引命中详情:setstatisticstimeonsetstatisticsioonsetstatisticsprofileonselect*from表名使用索引好处:执行原理(https://blog.csdn.net/m0_38128121/article/details/79663261)b+树:非叶子节点不存储真实的数据,只存储指引搜索方向的数据项b+树的查找过程......
  • 聚簇索引
    聚簇索引(ClusteredIndex)是数据库中一种特殊的索引类型,它决定了表中数据的物理存储顺序。在聚簇索引中,表中的数据按照索引的顺序进行物理排序,并且每个表只能有一个聚簇索引。举个例子,考虑一个名为"employees"的表,包含以下列:employee_id、first_name、last_name、salary。如果......
  • 嵌套查询
    nested子文档在ES内部其实也是独立的lucene文档,只是我们在查询的时候,ES内部帮我们做了类似数据库的join处理。最终看起来好像是一个独立的文档一样。如果一个订单,有1000个订单项,那么在ES中存在的文档数就是1001,会随着订单数的增加而成倍上升。那可想而知,同样的条件下,这个......
  • MySQL入门系列11-索引
    一、概念索引是帮助MySQL高效获取数据的数据结构。数据库除了存储数据之外,还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用数据,当我们在查找数据的时候,就可以在这些数据结构上实现高级查找算法,快速查找我们需要的数据,这种数据结构就是索引。在没有索引的情况下,查询......
  • 升讯威在线客服系统的并发高性能数据处理技术:PLINQ并行查询技术
    我在业余时间开发维护了一款免费开源的升讯威在线客服系统,也收获了许多用户。对我来说,只要能获得用户的认可,就是我最大的动力。最近客服系统成功经受住了客户现场组织的压力测试,获得了客户的认可。客户组织多名客服上线后,所有员工同一时间打开访客页面疯狂不停的给在线客服发消......
  • SQL Server 远程跨数据库服务器查询、导入数据(SQL)
    /*1、创建链接服务器查询*/--创建链接服务器execsp_addlinkedserver'remote_server','','SQLOLEDB','远程服务器名或ip地址'execsp_addlinkedsrvlogin'remote_server','false',null,'用户名','密码'--查询示例......
  • 农村高中生源转型期提升学生二次函数建模能力的课堂探究
        通过结合具体的数学问题,引导高中生深入分析问题,有效地构建求解问题的数学模型,可以使学生逐步掌握数学问题求解的基本思路以及模型建构的方法与注意事项。但是离开了反复训练,无法从根本上提升高中生的数学建模能力。因此,在平时的高中数学教学中,教师要注意结合数学教学的......
  • 商品查询业务之解决商品查询的缓存穿透、缓存雪崩、缓存击穿问题(封装工具类)
    商品查询业务之解决商品查询的缓存穿透、缓存雪崩、缓存击穿问题(封装工具类)核心思路如下:在原来的逻辑中,我们如果发现这个数据在mysql中不存在,直接就返回404了,这样是会存在缓存穿透问题的现在的逻辑中:如果这个数据不存在,我们不会返回404,还是会把这个数据写入到Redis中,并且将v......
  • 索引常见面试题
    索引常见面试题什么是索引?索引是数据的目录,用来加快数据的搜索,类似书本的目录可以分为几个类型数据结构b+树索引,通过b+树存储索引,但是非叶子节点保存数据,叶子节点保存数据hash索引:通过hash计算得出索引位置fulltext索引:也叫全文索引(我不会介绍)物理存储聚簇索引:索引......
  • 索引失效有哪些
    索引失效有哪些使用左模糊或者左右模糊匹配因为索引时按照从第一个字符开始排序,也就是按照前缀排序,左模糊查询的时候,符合查询条件的前缀是无规律的,并不能使用索引。查询条件中对索引字段进行做了函数,类型转换,计算操作之后因为索引保存的是原始值,并不是操作之后的数值,但是......