位置: 编程技术 - 正文

浅析SQL Server 聚焦索引对非聚集索引的影响(sqlserver聚集函数)

编辑:rootadmin

推荐整理分享浅析SQL Server 聚焦索引对非聚集索引的影响(sqlserver聚集函数),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:sql中聚合函数有哪些,sql 聚合,sqlserver聚集函数,sql中聚合函数有哪些,sql 聚类,sql 聚合,sql 聚合,sql 聚合,内容如对您有帮助,希望把文章链接给更多的朋友!

前言

在学习SQL 基础教程过程中会时不时穿插其他内容来进行讲解,相信看过SQL Server T-SQL基础教程的童鞋知道前面写的所有内容并非都是摘抄书上内容,如若是这样那将没有任何意义,学习的过程必须同时也是一个思考的过程,无论是独立思考也好还是查资料也罢都是思考而非走马观花,要不然过一段时间又会健忘。简短的内容,深入的理解。

话题

非聚集索引定义:非聚集索引也是一个B树结构,与聚集索引不同的是,B树的叶子节点存的是指向堆或聚集索引的指针。你真的理解了吗??你能举出例子吗??其实本节最终想表达的就是这个意思,定义太长,我们抽象一点来定义并得出最终结论,请往下看。

聚集索引对非聚集索引影响

关于聚集索引和非聚集索引的概念、原理、创建都不会再叙述,若对此不太了解请参考园中其他园友的详细介绍。

首先我们创建测试表

接下来我们再来创建测试数据

紧接着我们对表上的First和Second列创建聚集索引,如下

此时我们来同时运行两个查询,看看其执行计划【注】:上一篇已经说过,请启用包括实际执行的计划。

浅析SQL Server 聚焦索引对非聚集索引的影响(sqlserver聚集函数)

此时我们看到的执行计划如下:

通过上述毫无疑问我们可以得出结论:查询1是利用的全表扫描,而查询2利用的非聚集索引查找。我们应该对于这个结论没有任何怀疑,因为要第二个查询的Second列在此之前已经创建额非聚集索引,而对于查询1中的ID则没有,所以会造成查询1的全表扫描,而查询2则是非聚集索引查找。

下面我们对表上的列ID创建聚集索引。

此时我们再来运行如下查询:

此时再来看看查询执行计划:

通过上述我们对列ID创建了聚集索引,我们肯定能立马知道两者都是利用索引查找,确实没错,但是,但是你发现没有,睁大眼睛看看,我们明明在列ID上创建的是聚集索引,理论上应该是聚集索引查找才对啊,这就是我们本文所需要讨论的问题。

问题探讨

我们将问题进行如下概述,当我们在列上创建聚集索引时且查询返回该列,同时查询条件是创建了非聚集索引的列,此时对于创建了聚集索引的列的查询执行计划则是非聚集索引查找,这其中到底发生了什么?

实际发生的情况是非聚集索引内部引用了聚集索引, 当聚集索引被创建后在表中的数据会按照物理逻辑进行排序,当聚集索引没有被创建时此时非聚集索引指向的表中的数据并最终返回数据,但是一旦聚集索引创建了此时非聚集索引则会重建从而此时指向的是聚集索引,说到这里对于园友CareySon对于非聚集索引的描述:非聚集索引也是一个B树结构,与聚集索引不同的是,B树的叶子节点存的是指向堆或聚集索引的指针。概括的非常精准,若创建了聚集索引此时非聚集索引的指针则指向的是聚集索引,否则此时指向的是堆也就是表中的数据。所以此时在这种情况下,当查询创建了聚集索引的列时是进行了非聚集索引查找。

至此,我们可以得出结论:当在检索的列上创建了聚集索引时(仅仅返回创建聚集索引的列),此时查询不会使用聚集索引查找来检索结果而是使用非聚集索引查找来检索结果。

总结

个人觉得对于一个定义出来之前我们得首先抛出这样一个问题,如上述非聚集索引的定义:非聚集索引也是一个B树结构,与聚集索引不同的是,B树的叶子节点存的是指向堆或聚集索引的指针。初次看到这句感觉没什么,泛泛而谈,感觉似乎理解了,当遇到这样的问题时却不知所措,其实就是对定义理解的不够深入或者说不够透,当一个定义出来时你能举出这个定义的例子或者场景,那可能才算是真正了解了。本节我们到此结束,对于SQL这一系列会秉着简短的内容,深入的理解来讲解,同时也会循序渐进讲讲查询性能问题,由抛出问题到最终解决问题才算是收货多多。

标签: sqlserver聚集函数

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

上一篇:VS2015安装之后加装Sql server2014详细步骤(vs2015安装方法)

下一篇:浅析SQL Server的聚焦使用索引和查询执行计划(sql-server)

  • 什么是小规模纳税人税率
  • 什么情况下不能做近视激光手术
  • 代扣代缴个人所得税如何做账
  • 营业账簿印花税申报期限
  • 征信高风险是什么意思
  • 印花税申报减免额不能为0怎么报
  • 企业年报修改后,第三方平台多久同步
  • 社保基数是按税前工资还是税后工资
  • 小规模免增值税的账务处理
  • 咨询服务合同印花税税目
  • 会计准则哪些科目变化最大
  • 分期收款销售会计分录(现销)
  • 可变股权转让对价会计处理怎么做?
  • 补开的银行手续费发票怎么做账
  • 增值税专用发票抵扣期限
  • 造价服务费收费标准计算器
  • 企业租车费用怎么处理方法
  • 企业拨缴工会经费申报后税务机关需要审核吗
  • 福利费申报个人所得税该如何进行?
  • 携税宝可以全额抵扣吗
  • 企业房屋管理办法
  • 企业所得税季报是填累计数吗
  • 对员工的罚款怎么做账
  • 开土地租赁发票需要交哪些税费
  • 承兑汇票属于现金支付吗
  • 一般纳税人企业所得税税率多少
  • 专票入库单金额怎么算
  • 金融保险属于什么行业
  • 预算与决算对比分析
  • 生产企业原材料的订购与运输建模
  • 查看电脑系统版本
  • win10分辨率调整
  • 冲减其他应收款需要领导审批吗
  • 发票认证了,但是没有入账
  • 政策性搬迁损失扣除年度
  • phpstudy的ftp
  • 已入账的普通发票红冲后怎么做账
  • php files
  • 买房增值税征收标准
  • 我找到了这个
  • vscode eslint vue
  • 法国西南部城市
  • 企业纳税额包括个人所得税吗
  • php计算时间
  • 非征期不能抄报
  • vue 配置
  • php创建多级目录的方法
  • 个人出租租房交什么税
  • 一般纳税人普通发票做账
  • 个税申报不成功,累计减除费用60000审核不通过
  • 工程行业预交税款怎么算
  • 支付土地补偿款计入什么科目
  • 印花税减半征收优惠政策2021
  • 中级会计报名必须满4年吗
  • 网银转账退回来是怎么回事
  • 城镇土地税需要计税吗
  • 无追保理是投资理财吗
  • 建筑企业外地预缴
  • 对公账户没有用了一定要注销吗?
  • 如何做好现金流
  • mysql如何列转行
  • win7系统旗舰版和纯净版的区别
  • xp系统怎么关闭自动关机
  • windows xp 任务栏在右边
  • win7系统点击桌面图标没反应
  • linux 定时执行命令
  • [置顶] 纯享版奥义,手机迅雷搜:阿天动漫
  • opencv是干嘛用的
  • linux shell命令的返回值
  • shell脚本替换文件中某个字符串
  • 守护进程和普通进程
  • 请不要重复犯我在学习Python和Linux系统上的错误
  • Python制作钟表代码
  • 国家税务总局张局长
  • 非税收入纳入一般公共预算管理
  • 构建税务系统纵向到底
  • 残疾人企业如何申请补贴
  • 重庆水费怎么交费
  • 2008土地管理办法
  • 无偿赠送怎么做账
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设