`

SQL SERVER索引优化系列之三:填充因子

阅读更多

建SQL SERVER索引的时候有一个选项,即Fillfactor(填充因子)。

这个可能很少人会去注意它,但它也是比较重要的。大家可能也都知道有这个东西,但是如何去使用它,可能会比较迷糊。另外,即使你理解了它的原理,也不一定能使用好它,这个还要具体分析索引字段的更新频率等等。

记得看书知道有这么个东西,但是都是看的迷迷糊糊的,不知道干吗的,好象设置不设置都一样的。其实,像索引这些东西,当数据达到几十万上百万的时候,它的效果就表现的很明显。

填充因子定义:索引中叶级页的数据充满度。它的作用:当系统新建或重建索引时,在每一个索引页上预先留出一部分空间。使得系统在新增索引信息时能够保持索引页不分裂。它的目的是使索引的页分裂最小并对性能微调。

A

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(图A)

看图A,通过前面说的我们知道数据是按页存的,根据定义,填充因子是指图A中的Page100(Page110,Page120,Page130) 的数据的充满度。如果按默认,填充因子是为0(0和100%是一样的),即完全充满。如果设置60%,则Page100的数据只充满空间的60%,会有 40%的剩余空间。

填充因子只在创建索引时执行;索引创建后,当表中进行数据的添加、删除或更新时,不会保持填充因子。即创建索引完后添加数据,比如添加”COM”, 则会添加在Page100的”CON”的前面,此时Page100的剩余空间将小于40%。因为充满度只有60%,所以”Barr”和”CON”之间会有 空隙,所以”COM”将直接插入他们之间,不会照成数据移动和页分裂。如果充满度是100%即整页充满数据,则会照成”CON”及它后面的数据都向后移动 1位,然后在”CON”前面插入”COM”,而Page100会大约一半的行(后半部)移到新页中以便为新行腾出空间(这种重组称为页拆分。页拆分会降低 性能并使表中的数据存储产生碎片.),在这些移动的过程中一方面速度明显下降,另一方面会产生碎片。添加完数据后要使填充因子继续保持60%则需要重建索 引。

有人将填充因子比喻成下面这个例子:

为了给一个班的10个同学排一下顺序,我们可以给每一位同学一个编号,如:
a. 从1,2,3,4,5,6,7,9,10。这时,我们说填充因子是100.
此时,如果又来了新同学,而其排名要在中间某位置的话,我们就要改变许多个同学的号码,如新同学排第5位,就需要4号以后的同学号码都加1,再将新同学编为5号才行.
b.我们又可以给同学这样编号:1,3,5,7,9,11,13,15,17,19
也同样完成了顺序的排列.我们说这时填充因子是50%,此时如果来了新同学,又是排在第5位的话,那么我们只需将其号码编为8就行了.其它同学都不用变.

可见,填充因子大的时候,点用的号码空间小,耗费资源少,小的时候,占用资源加大,但操作方便,迅速.

填充因子大的时候,插入或修改记录后重新索引的工作会很大,磁盘IO操作增加,性能必然降低,但其占用空间小.填充因子小的时候,索引文件占用磁盘及内存空间相对要大,但是,系统本身重新索引所需IO操作减少,性能提高,只是多占用一些存储空间. 孰轻孰重要自已决定。

通常只有当不会对数据进行更改时(例如,在只读表中)才会使设置100%。另外,只有当在表中根据现有数据创建新索引,并且可以精确预见将来会对这些数据进行哪些更改时,将填充因子选项设置为另一个值才有用。所以填充因子不是很容易设置的。

 

分享到:
评论

相关推荐

    优化SQL Server索引的小技巧

    其中,优化数据库索引的使用是提高 SQL Server 性能的关键因素之一。在本文中,我们将讨论如何用 SQL Server 的工具来优化数据库索引的使用,并涉及到有关索引的一般性知识。 索引的类型主要有两种:clustered 索引...

    T-SQL查询高级SQLServer索引中的碎片和填充因子word文档doc格式最新版本

    **标题:** SQL Server索引管理:碎片与填充因子的深度解析 **引言:** 本文旨在深入探讨SQL Server索引中的碎片问题及其对性能的影响,特别是填充因子的作用。为了充分理解本文内容,建议读者已具备一定的索引和...

    SqlServer性能优化高效索引指南

    SqlServer性能优化是数据库管理员和开发人员必须面对的常见任务,而高效索引则是提升SqlServer数据库性能的关键手段之一。索引是数据库表中的一种数据结构,用于加速查询操作,尤其是那些涉及WHERE子句、JOIN操作和...

    SQLServer索引设计经验谈

    本文旨在探讨Microsoft SQL Server中的索引设计技巧,尤其是如何通过合理的索引策略来优化查询性能。通过对聚集索引与非聚集索引的选择、索引列的排序方式、填充因子的设定以及避免不当的索引设计等方面进行详细的...

    SQLServer索引碎片和解决方法

    SQLServer的维护计划向导可以帮助设置定期的索引优化任务,确保数据库性能的稳定。同时,合理设计索引,如避免过多的小字段索引,以及选择适合业务场景的索引类型(如聚集索引和非聚集索引),也能有效预防碎片的...

    提高SQL Server性能,可通过DBCC DBREINDEX重建索引

    ### 提高SQL Server性能:通过DBCC DBREINDEX重建索引 #### 一、引言 在数据库管理系统中,SQL Server作为一款广泛使用的数据库产品,其性能优化是...此外,合理设置填充因子也是优化索引空间利用率的重要手段之一。

    sql server创建索引

    在SQL Server中,创建索引是一项关键的数据库优化技术,旨在加速数据检索速度,提高查询性能。本文将深入探讨如何在SQL Server中创建索引,包括理解不同类型的索引、索引的创建语法以及如何利用索引提升数据库性能。...

    SQLServer索引+性能优化.rar

    在这个名为"SQLServer索引+性能优化.rar"的压缩包中,包含了一系列关于SQL Server性能优化和索引原理的PPT材料,适合初学者进行深入学习。 首先,让我们来了解索引的基本概念。在数据库中,索引就像是书籍的目录,...

    SQL Server中优化其索引的妙招

    在SQL Server中,优化索引对于提升数据库性能至关重要。索引分为两种主要类型:聚集索引(Clustered Index)和非聚集索引(Nonclustered Index)。聚集索引决定了数据在磁盘上的物理顺序,因此当数据列具有高度...

    SQL Server 2000 完结篇 性能调优与维护系列视频教程

    - **索引性能因素**:探讨了影响索引性能的各种因素,如索引键的选择、索引的填充因子等。 - **索引优化建议**:给出了具体的索引设计和优化建议,帮助用户提高查询效率。 #### 8. SQL Server 2000过程优化详解 - *...

    Sql server优化50法

    索引的优化,如调整填充因子,选择适当的列作为索引,避免对少数值的字段建立索引等。 3. **分布式分区视图**:通过将数据分布于多个服务器上,可以提高查询效率和系统扩展性,特别适用于大型多层Web应用。 4. **...

    对SQL Server索引的探讨.pdf

    SQL Server提供了一系列操作索引的命令,如DBCC INDEXDEFRAG用于重新组织指定表的聚集和非聚集索引,DBCC DBREINDEX用于重建索引,CREATE INDEX WITH DROP_EXISTING用于在创建新索引的同时删除旧索引。此外,UPDATE ...

    SQL Server 2000数据库中如何重建索引

    这在你想要改变索引的填充因子或者有其他特定需求时非常有用。 重建索引的过程不仅考虑了性能提升,还涉及数据的排序顺序。使用`DROP_EXISTING`或`DBCC DBREINDEX`时,可以保留现有的数据排序,从而避免了重新排序...

    数据库 创建索引 sql oracle

    索引的优化包括选择正确的索引类型、选择正确的索引字段、优化索引的填充因子、优化索引的 Statistics 等。 创建索引可以提高查询速度,降低数据库的负载,提高数据的安全性。但是,索引的创建和管理需要遵循一定的...

    50种方法优化SQL Server数据库查询

    * 索引填充因子:索引填充因子应该适当,使用默认值0是一个不错的选择。 * 索引创建:索引应该尽量小,使用字节数小的列建索引好,例如使用整数类型的列建索引。 硬件升级 硬件升级是提高数据库性能的一种方法: ...

    sqlserver数据库优化50法

    注意索引填充因子的设定,一般推荐使用默认值。 5) 提升网络带宽,减少数据传输时间。 6) 配置合适的虚拟内存,根据服务器上运行的服务调整大小,SQL Server配置max server memory选项以匹配物理内存的1.5倍。 7)...

    SQL Server索引技术的教学实践.pdf

    在使用T-SQL语句创建索引时,需要考虑索引类型、排序规则、填充因子等选项。特殊情况下,还可能需要考虑 Ignore_dup_key、Drop_Existing、Statistics_norecompute、Sort_in_tempdb等高级选项。 填充因子...

    SQL Server查询优化

    填充因子的设定也很重要,一般建议使用默认值,以平衡索引紧凑性和更新效率。 2. **I/O优化**:I/O性能直接影响查询速度。将数据、日志和索引分配到不同的I/O设备上可以提升读取速度。在SQL Server 2000之前,...

Global site tag (gtag.js) - Google Analytics