位置: 编程技术 - 正文

Sql Server中的非聚集索引详细介(sql中的非逻辑)

编辑:rootadmin

推荐整理分享Sql Server中的非聚集索引详细介(sql中的非逻辑),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:sql非空怎么写,sqlserver非空判断,非sql 数据库,sql表示非,sqlserver非空判断,非sql 数据库,非sql 数据库,非sql 数据库,内容如对您有帮助,希望把文章链接给更多的朋友!

  非聚集索引,这个是大家都非常熟悉的一个东西,有时候我们由于业务原因,sql写的非常复杂,需要join很多张表,然后就泪流满面了。。。这时候就有DBA或者资深的开发给你看这个猥琐的sql,通过执行计划一分析。。。或许就看出了不该有的表扫描。。。万恶之源。。。然后给你在关键的字段加上非聚集索引后。。。才发现提速比阿斯顿马丁还要快。。。那么一个问题来了,为什么非聚集索引能提速这么快。。。怎么做到的???是不是非常的好奇???

这篇我们来解开神秘面纱。

一:现象

先让我们一睹非聚集索引的真容,看看到底在执行计划看来是个什么玩意。。。我这里有个product表,里面灌了8w多数据,然后在Name列上建立

一个非聚集索引,就像下图一样:

  

从上图中看到了两个好玩的东西,一个就是我想看到的“索引查找[nonclustered]”,这个大家很熟悉,也是这篇要说的,然后我们还看到了一个“RID查找”,乍一看这是什么鸡巴玩意。。。非聚集索引跟它扯上什么关系了???

二:什么是RID

  通过前面几篇,我想大家都知道了数据页中的记录是如何寻找的?秘密就是通过slot槽位中的偏移量决定的,那问题来了,如果上升到数据页层面,我只需要(pageID:slotID)就可以找到记录了,对不对?那如果我上升了文件层面,那是不是只需要知道(fileID:pageID:slotID)就可以找到数据页中的 记录了?其实这里的RID就是站在文件的高度通过(fileID:pageID:slotID)找到表记录的。。。既RID=RowID=(fileID:pageID:slotID),如果你非要眼见实的话,在sq中l还真提供了这么个函数(sys.fn_PhysLocFormatter(%%physloc%%)),我们看下图:

看了上面的图,是不是很兴奋,一目了然,比如productID=这条记录,然来是在1号文件,号数据页,0号槽位上,productID=是在1号槽位上,好了,当你知道RID是个什么东西的时候,我想你已经离彻底理解非聚集索引不远啦。。。

三:非聚集索引

  有一点我们肯定知道,就是非聚集索引是可以加速查找的,要是跟表扫描那样的龟速,那也就失去了索引的目的,既然能加速,是因为它和聚集索引一样,在底层都玩起了B树,首先我们插入一些样例数据。

上面的sql,我故意在Name列设置为个char,这也是索引的上限值,这样的话,我DBCC就可以导出很多数据页和索引页了。

可以看到,当我dbcc ind 的时候,发现Person表中已经有4个数据页,5个索引页,其中号数据页是表跟踪页,号为索引跟踪页,这也就说明当我建立索引后,引擎给我们分配了专门的索引页来存放我们建立的Name索引,那下一步就是我们来看看这些索引中都存放着什么,这也是我非常关心的,接下来我导出号索引页。

Sql Server中的非聚集索引详细介(sql中的非逻辑)

从上面至少可以发现三个有趣的现象:

<1>:号索引页中slot0和slot1槽位指向记录的内容已经有序了,比如:aaaaa,bbbbb。。。。这样。。。。原来非聚集索引也是有序呀。。。

<2>:就是进制的aaaaa。

   :这几个数字非常重要,因为是进制表示,所以2位进制表示一个字节,所以可以这么解释,前面4个字节表示

   pageID,中间2个字节表示fileID,后面2个字节表示slot,看到这里你是不是想起了RID。。。因为RID就是这三样的组合。。。原来非聚集索

   引的记录存放的就是“key+RowID”呀。。。。

<3>:通过最后的槽位列表,可以得知号索引页上存放着8条索引记录。

  好了,看完了叶子节点,我们再看分支节点,也就是IndexLevel=1的那条索引数据页,也就是号。ok,dbcc看看吧。

当看到这个列表的时候,不知道你脑子里面是不是有一幅图出来了,就像上一篇看到聚集索引一样,因为它的结构和聚集索引非常像,只不过非聚集索引这里多了一个RID而已。。。最后我也把图贡献一下。

总结一下:在走非聚集索引的时候,比如你的条件是where name='jjjjj' 时,它的逻辑是这样的,根据号索引数据页的key的范围,然后通过rowid走到了号索引数据页,然后在号索引数据页中顺利的找到了jjjjj,这时候就可以拿出jjjjj的rowid去表数据页中直接定位记录,最后输出。。。。。这个也就是博客开头的地方为什么会出现RID的查找。。。

Sql Server中的DBCC命令详细介绍 今天研发中心办年会,晚上就是各自部门聚餐了,我个人喜欢喝干红,在干红中你可以体味到那种酸甜苦辣。。。人生何尝不是这样呢???正好ceo从

SQL Server中将查询结果转换为Json格式脚本分享 脚本源码:SETANSI_NULLSONGOSETQUOTED_IDENTIFIERONGOCREATEPROCEDURE[dbo].[SerializeJSON](@ParameterSQLASVARCHAR(MAX))ASBEGINDECLARE@SQLNVARCHAR(MAX)DECLARE@XMLStringVARCHAR(MAX)DECLARE@XMLXMLDECLA

SQL Server中将数据导出为XML和Json方法分享 有时候需要一次性将SQLServer中的数据导出给其他部门的也许进行关联或分析,这种需求对于SSIS来说当然是非常简单,但很多时候仅仅需要一次性导出这

标签: sql中的非逻辑

本文链接地址:https://www.jiuchutong.com/biancheng/347769.html 转载请保留说明!

上一篇:理解Sql Server中的聚集索引(解释sql server实例)

下一篇:Sql Server中的DBCC命令详细介绍(sql server dbcc)

  • 小规模纳税人取得专票和普票区别
  • 其他应收款和其他应付款可以通用吗
  • 结转本月完工入库产品制造成本,甲产品800台全部完工
  • 国税地税合并后叫什么名称
  • 企业缴纳残疾人保证金按什么标准缴纳
  • 买金税盘发票能全额抵进项税吗
  • 服务性单位从事的是餐饮中介服务
  • 收到工伤赔偿款会计分录
  • 企业增加注册资本需要缴纳什么税
  • 销售应税消费品应交的消费税
  • 小企业净资产收益率
  • 股权投资损失该如何做账务处理及税前扣除相关规定
  • 一般纳税人汽车修理费可以抵扣吗
  • 资本公积提取比例怎么算
  • 计提汇算清缴所得税分录
  • 公司税务注销了还有风险吗
  • 旅游业相关行业
  • 发票领出来之后税盘要怎么处理
  • 房地产所得税税负率计算公式
  • 影响固定资产折旧的有
  • 工程项目预缴增值税
  • mac显示器颜色不正常
  • mac怎么调整网页大小
  • 我们无法创建新的分区,也找不到现有的分区 贴吧
  • 王者荣耀如何充值退款
  • 职工福利费的计提标准
  • php远程调用
  • phpcookie
  • 一般纳税人取得普票会计分录
  • windows 11 正式版实际使用体验如何?
  • smart控制技术
  • php function
  • vue-router.esm.js?a12b:2046 Uncaught (in promise) NavigationDuplicated: Avoided redundant navigation
  • vue的路由实现
  • 小程序uniacid
  • 存货捐赠视同销售要不要确认收入?
  • java如何实现异步处理
  • vue3使用教程
  • Anaconda(python,pycharm)半详细安装教程
  • java异常编程题
  • 电子税务局网开电子发票
  • 公司吸收合并是利好吗
  • c#连接数据库的基本步骤是什么
  • 收到以前年度退回的企业所得税怎么做账
  • 固定资产清理时增值税怎么处理
  • 企业之间利息收入开票吗
  • 美容院收入怎么做会计分录
  • 固定资产报废如何进行账务处理
  • 一般纳税人农业企业免企业所得吗
  • 税控抵税怎么做分录
  • 公允价值变动损益借贷方向
  • 结转已销商品的销售成本分录
  • 购进货物的发票确认定虚开,所得税处理
  • 事业单位职工福利费支出范围
  • 固定资产的折旧年限规定
  • sql语句错误提示
  • 存储过程实现业务逻辑
  • mysql5.5创建用户
  • 微软windows8.1
  • Windows Server 2008下 驾驭拨号上网
  • window10声音自动减小
  • mac怎么设置开机默认windows
  • mac os 如何备份
  • win10系统怎么打开软键盘
  • KbdTray.exe - KbdTray是什么进程 有什么作用
  • win7系统代理在哪里设置
  • windows 8 build 8148
  • linux如何修改gid
  • windows7无法继续安装
  • win7系统无wifi连接
  • 投影变换的使用方法
  • Build Qt5.3.1 for Freescale I.MX6Q based Linux 3.0.15
  • shell截取字段
  • javascript编辑工具
  • jQuery实现磁力图片跟随效果完整示例
  • Python字符串切片例子
  • javascript与java
  • 南通税务网站
  • 清税申报表怎么填写
  • 事业单位的会计制度是什么
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设