在SQL Server中,索引是按B树(平衡树)结构进行组织的,索引B树中的每一页称为一个索引节点,B树的顶端节点称为根节点,索引中的底层节点称为叶节点,根节点与叶节点之间的任何索引级别统称为中间级,当加入新的数据时,为了保证需要相同次数的读取来找到每个页,中间级页会进行拆分生成新的层,如图所示。

每个层的宽度增加为上一层能够记录的页数,当现有的树不能记录更多的页时,则会创建一个新的层,索引记录的大小受到编入索引列的大小影响,因此编入索引列越窄,则可以放到一个页的索引越多,从而索引需要的层数越少,每一层需要1次逻辑读,所以索引树层次越少越好。

填充因子是指每个叶子层页填充数据的百分比,提供填充因子选项是为了优化索引数据存储和性能,使用fill factor选项可以指定Microsoft SQL Server使用现有数据创建新索引时将每页填满到什么程度。fill factor选项是一个高级选项,如果使用sp_configure系统存储过程来更改该设置,则只有在show advanced options设置为1时才能更改fill factor,设置在重新启动服务器后生效。

当创建或重新生成索引时,填充因子值可确定每个叶级页上要填充数据的空间百分比,以便保留一定百分比的可用空间供以后扩展索引。例如,指定填充因子的值为80表示每个叶级页上将有20%的空间保留为空,以便随着在基础表中添加数据而为扩展索引提供空间。

填充因子可设置值为1到100之间的一个百分比,在大多数情况下,服务器范围的默认值为0,如果将填充因子设置为0,则表示填充满整个叶级页,但在实际测试过程中一般不会设置为填充满叶级页,因为至少需要留出再添加一个索引行的空间,使用此设置可有效使用叶级空间,但应保留一定的空间以便在不得不拆分页之前进行有限的扩展。

注意:填充因为设置为0和设置为100含意相同,都表示填充满整个叶级页。并且只有在创建或重新生成了索引后,才会应用填充因子,SQL Server Database Engine 并不会在页中动态保持指定的可用空间百分比,如果试图在数据页上保持额外的空间,将有背于使用填充因子的本意,因为随着数据的输入,数据库引擎将不得不在每个页上进行页拆分,以保持填充因子所指定的可用空间百分比。

如果向已满的索引页添加新行,数据库引擎将把大约一半的行移到新页中,以便为该新行腾出空间,这种重组称为页拆分。页拆分可为新记录腾出空间,但是执行页拆分可能需要花费一定的时间,此操作会消耗大量资源。此外,它还可能造成碎片,从而导致I/O操作增加,这样会直接影响数据库的性能。正确选择填充因子值可提供足够的空间以便随着向基础表中添加数据而扩展索引,从而减少页拆分可能性。如果经常发生页拆分,可通过使用新的或现有的填充因子值来重新生成索引,从而重新分发数据。

尽管采用较低的填充因子值(非0)可减少随着索引增长而拆分页的需求,但是索引将需要更多的存储空间,并且会降低读取性能,即使对于面向许多插入和更新操作的应用程序,数据库读取次数一般也超过数据库写入次数的5到10倍。因此,指定一个不同于默认值的填充因子会降低数据库的读取性能,而降低比与填充因子设置的值成反比。例如,当填充因子的值为50时,数据库的读取性能会降低两倍,读取性能降低是因为索引包含较多的页,因此增加了检索数据所需的磁盘I/O操作。

SQL SERVER索引原理及填充因子相关推荐

  1. 基准风险因子暴露度_具有性能基准SQL Server索引填充因子

    基准风险因子暴露度 In this article, we will study in detail about the how SQL Server Index Fill factor works. ...

  2. Sql server索引优化

    Sql server索引优化 索引优化(1)堆上的非聚集索引 一.索引概述 1.概念 可以把索引理解为一种特殊的目录.就好比<新华字典>为了加快查找的速度,提供了几套目录,分别按拼音.偏旁 ...

  3. MS SQL Server数据库原理

    MS SQL Server数据库原理 一. 数据库基本概念 数据库系统(DBS):采用数据库技术的计算机系统,由数据库(数据).数据库管理系统(软件).数据库管理员(人员).硬件平台(硬件)和软件平台 ...

  4. 索引sql server_有关SQL Server索引的十大问题和解答

    索引sql server 介绍 (Introduction) Without a doubt, few technologies in SQL Server cause as much confusi ...

  5. 详细讲解SQL Server索引的性能问题

    在良好的数据库设计基础上,能有效地使用索引是SQL Server取得高性能的基础,SQL Server采用基于代价的优化模型,它对每一个提交的有关表的查询,决定是否使用索引或用哪一个索引.因为查询执行 ...

  6. SQL Server索引总结二

    从CREATE开始 通过显式的CREATE INDEX命令 在创建约束时作为隐含的对象 随约束创建的隐含索引 当向表中添加如下两种约束之一时,就会创建隐含索引. 主键约束(聚集索引) 唯一约束(唯一索 ...

  7. 索引sql server_维护SQL Server索引

    索引sql server In the previous articles of this series (see the full article TOC at bottom), we discus ...

  8. 索引sql server_优化SQL Server索引策略

    索引sql server 指数策略概述 (Index strategies overview) This article is about techniques for optimizing the ...

  9. 探索SSMS中SQL Server索引属性

    This article gives you an insight into SQL Server Index properties in SSMS. 本文使您可以深入了解SSMS中SQL Serve ...

最新文章

  1. Chrome Restful Api 测试工具 Postman-REST-Client离线安装包下载,Axure RP Extension for Chrome离线版下载...
  2. GO语言使用的几个注意点
  3. hdu 6148 数位dp
  4. 前端UI框架《Angulr》入门
  5. springboot版本升级导致webservice调用失败org.apache.cxf.common.jaxb.JAXBUtils.createMininumEscapeHandle
  6. java中的dao模式
  7. SetCapture()函数和ReleaseCapture()
  8. 03-树2. List Leaves (25) 二叉树的层序遍历
  9. mysql表utf-8 字符串入库编码异常
  10. 疑难杂症 | Win10解压文件后乱码
  11. xci转nsp工具_再谈xci、nsz、nsp
  12. 计算机硬件常见的故障及维修方法,计算机硬件常见故障及解决方法
  13. python爬虫模拟登录之图片验证码
  14. php cookie start,有关php session和Cookie问题session_start开启后做什么事?
  15. numpy.median
  16. AD软件——设计总结(差分布线,蛇形布线)
  17. “卖惨”的悲情牌打多了,营销终将变“悲剧”
  18. Java实现统计字符次数(按大写、小写、数字来统计)
  19. stc89c52c语言开发,stc89c52烧写程序
  20. WINRAR的破解方法

热门文章

  1. 【活动】免费来拿计算机图书啦——“让计算机图书更有价值”活动
  2. Opencv之图像滤波:2.均值滤波(cv2.blur)
  3. Rstudio安装问题
  4. 奇异矩阵 singular matrix
  5. 软件架构师成长之路: Master Plan for becoming a Software Architect
  6. 3_计算机网络_网路层-IP-子网划分-路由-ping
  7. 首份成绩单交出却遇重挫,被阿里对狙的贝壳还能“涨”多快?
  8. 微信小程序实现星巴克用星说效果
  9. Pytorch1.9 GPU CUDA111安装教程
  10. 娱乐圈的 IT 人秒变脸!