iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >Sql Server中聚集索引的作用是什么
  • 913
分享到

Sql Server中聚集索引的作用是什么

2024-04-02 19:04:59 913人浏览 薄情痞子
摘要

这篇文章将为大家详细讲解有关SQL Server中聚集索引的作用是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一:现象1:无索引的情况  还是老规矩,

这篇文章将为大家详细讲解有关SQL Server中聚集索引的作用是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

一:现象

1:无索引的情况

  还是老规矩,看个例子感受下,首先我有一个Product表,里面没有任何索引,如下图:

从上图中,我悲剧的看到了,物理读是9次,也就说明走了9次硬盘,你也可以想到,走硬盘的目的是为了拿数据,逻辑读有1636次,要注意的是这里的”次“是“页”的意思,也就是在内存中走了1636个数据页,我用dbcc ind 给你看一下,是不是有1636个表数据页。

这里有1637个数据页的原因是第一个是IAM跟踪页。

2:有聚集索引的情况

下面我在Product表中建一个product_idx_productid的聚集索引,然后再次看看io情况,如下图:

当你看到这个”逻辑读“为3次的时候,你是不是已经疯了。。。在多达1636个数据页中找到目标数据,只需3次。。。。这个在算法盲看来是不是神

仙下凡???当然,,,此物天上有,人间也有。。。既然有,就应该有一种非常强烈的探索欲。。。。看看这里面到底是怎么玩的。。。。。。

二:探索原理

1:探索叶子节点

  刚才也说了,聚集索引玩的就是B树,既然是B树,那就有叶子节点和分支节点,专业术语就是度为0的为叶子节点,度>0的叫做分支节点。。。。

我想你也听说了,聚集索引是将索引列数据进行排序后放入B树,那为了让你眼见为实,我先建立一个ID无序的3条记录。

复制代码 代码如下: dbcc traceon(3604)dbcc page(Ctrip,1,120,1)

然后我用dbcc ind 命令查看下3条记录在哪个数据页中,如图:

从图中可以看到,我的三条记录是放在148号数据页中的,然后我导出148号数据页,看看内容是什么。

复制代码 代码如下: dbcc traceon(3604)dbcc page(Ctrip,1,173,1)

从上图中,我们看到了”数据页“中的各个槽位的指向是按照表中的实际存储记录来的,好了,下面我创建个聚集索引,看看实际数据是不是真的有序了?

复制代码 代码如下: create clustered index Ctrip_idx_ID on Person(ID)

不过在这里有个有趣的问题,我的148号”表数据页“哪去了???也是够奇葩的,换来的确实173号索引页,那为了保证数据完整性,应该是把148号数据页的内容灌到173索引页里面去了吧???? 没关系,验证一下。

复制代码 代码如下: dbcc traceon(3604)dbcc page(Ctrip,1,173,1)

通过上面的图,有没有直观的感觉到? 数据现在已经是aaaaa,bbbbb,ccccc的模式了。。。有序啦。。。。同时索引页中也保存了148号数据

页的字段值,比如ID,Name信息,拿下面的slot0槽位举例:

到此为止,我想你对叶子节点的内容有了个大概的认识,起码没有让你死记硬背了~~~

2 :探索分支节点

  为了让你看到分支节点,我得多灌一些数据进去,好歹要让数据撑破一个索引数据页,这样分支节点索引数据页就出来了,看下面的例子:

从图中可以看到,当我插入1000条数据的时候,已经出现了一个分支节点(120号索引数据页),三个叶子节点(173,121,126),叶子

节点的数据页内容我也说过了,现在我很好奇”分支节点“中保存着什么内容???我好兴奋,我要导出120号索引数据页了。。。

复制代码 代码如下: dbcc traceon(3604)dbcc page(Ctrip,1,120,1)

简单分析下slot0:06000000 00ad0000 000100 的内容

00000000:叶子索引页中的最小key值(这里有点特殊,除一行记录不是保存最小值以外,其余都是的),转换为十进制就是0。

ad000000:叶子索引页的页号,转换为十进制就是173。

0100:叶子索引页的文件号,转换为十进制就是1.

不过通过分析,我们看到了,其实分支节点中保存着有两个值,一个childpage的minkey,一个childpage的pageid,同理,其他的槽位也是这样。

我们换个参数命令,让结果更直观点,记录中就是保存着”pageID“和”minKey“。

这样的话,我脑海中就有一张图出来了,不知道你现在是否有了????

通过上面的分析,除了第一行记录不是保存子索引页中最小key的值外,其他记录都是提取子索引页中的最小索引键值,这一点要注意。。。

也许对sqlserver团队来说,只要判断小于449的话就直接去(1:173)数据页,小于889的直接去(1:121)数据页就可以啦。。。

关于Sql Server中聚集索引的作用是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

您可能感兴趣的文档:

--结束END--

本文标题: Sql Server中聚集索引的作用是什么

本文链接: https://www.lsjlt.com/news/57955.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Sql Server中聚集索引的作用是什么
    这篇文章将为大家详细讲解有关Sql Server中聚集索引的作用是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一:现象1:无索引的情况  还是老规矩,...
    99+
    2022-10-18
  • Sql Server中非聚集索引的作用是什么
    这篇文章将为大家详细讲解有关Sql Server中非聚集索引的作用是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一:现象先让我们一睹非聚集索引的真容,...
    99+
    2022-10-18
  • sql中怎么实现聚集索引和非聚集索引
    这期内容当中小编将会给大家带来有关sql中怎么实现聚集索引和非聚集索引,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。聚集索引   一种索引,该索引中键值的逻辑顺序决定了表...
    99+
    2022-10-18
  • SQLSERVER中非聚集索引的原理是什么
    SQLSERVER中非聚集索引的原理是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。我们知道SQLSERVER的数据行的存储有两种数据...
    99+
    2022-10-18
  • SQL Server索引有什么用
    这篇文章给大家分享的是有关SQL Server索引有什么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。索引的概念索引的用途:我们对数据查询及处理速度已成为衡量应用系统成败的标准...
    99+
    2022-10-18
  • SQL Server中表和索引存储结构的作用是什么
    这篇文章给大家介绍SQL Server中表和索引存储结构的作用是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1. 堆所谓堆(heap),就是不含聚集索引的表。堆的 sys.par...
    99+
    2022-10-18
  • SQL Server中的聚合函数是什么
    小编给大家分享一下SQL Server中的聚合函数是什么,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!SQL Server中的聚合函数有:1、AVG;2、COUNT;3、MAX;4、SUM...
    99+
    2022-10-18
  • SQL Server中哈希索引的原理是什么
    这篇文章将为大家详细讲解有关SQL Server中哈希索引的原理是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。当一个key-value键值对传递给一个...
    99+
    2022-10-18
  • MySQL中的聚簇索引、非聚簇索引、联合索引和唯一索引是什么
    今天小编给大家分享一下MySQL中的聚簇索引、非聚簇索引、联合索引和唯一索引是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章...
    99+
    2023-04-21
    mysql
  • mysql中聚簇索引与非聚簇索引的区别是什么
    mysql中聚簇索引与非聚簇索引的区别是什么?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。通常情况下,建立索引是加快查询速度的有效手段。但...
    99+
    2022-10-18
  • SQL Server索引优化的方法是什么
    这篇“SQL Server索引优化的方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“SQL Server索引优化的方...
    99+
    2023-06-27
  • mysql中的聚簇索引是什么
    mysql中的聚簇索引是什么?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。聚簇索引聚簇索引也叫簇类索引,是一种对磁盘上实际数据...
    99+
    2022-10-18
  • mysql中什么是聚簇索引
    这篇文章将为大家详细讲解有关mysql中什么是聚簇索引,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1、说明聚簇索引不需要我们显示的创建,他是由InnoDB存储引擎自动为我们创建的。如果没有...
    99+
    2023-06-15
  • SQL Server中的索引怎么使用
    本篇内容主要讲解“SQL Server中的索引怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SQL Server中的索引怎么使用”吧!一、索引的介绍什么是索引?索引是...
    99+
    2023-06-30
  • SQL Server中的索引怎么使用
    在SQL Server中,索引可以提高查询性能,加快数据的检索速度。下面是一些使用索引的常见方法:1. 创建索引:在需要加速查询的列...
    99+
    2023-08-18
    SQL Server
  • MySQL聚簇索引和非聚簇索引的区别是什么
    这篇文章主要介绍“MySQL聚簇索引和非聚簇索引的区别是什么”,在日常操作中,相信很多人在MySQL聚簇索引和非聚簇索引的区别是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MySQL聚簇索引和非聚簇索引...
    99+
    2023-07-02
  • mysql中聚集索引、辅助索引、覆盖索引、联合索引怎么用
    这篇文章主要介绍了mysql中聚集索引、辅助索引、覆盖索引、联合索引怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。聚集索引(Clustered Index)聚集索引就是...
    99+
    2023-06-29
  • mysql中的非聚簇索引是什么
    今天就跟大家聊聊有关mysql中的非聚簇索引,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。mysql中非聚簇索引是:非聚簇索引,索引的一种。索引分为...
    99+
    2022-10-18
  • 优化SQL Server索引的技巧是什么样的
    本篇文章给大家分享的是有关优化SQL Server索引的技巧是什么样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。影响到数据库性能的最大因素就是索引。由于该问题的复杂性,我只...
    99+
    2023-06-05
  • SQL Server中索引的用法详解
    索引是一种数据结构,用于提高数据库中数据的查询效率。SQL Server中的索引可以分为聚集索引和非聚集索引两种类型。聚集索引决定了...
    99+
    2023-08-17
    SQL Server
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作