填充因子

性能注意事项
页拆分
正确选择填充因子值可提供足够的空间,以便随着向基础表中添加数据而扩展索引,从而降低页拆分的可能性。如果向已满的索引页添加新行,数据库引擎将把大约一半的行移到新页中,以便为该新行腾出空间。 这种重组称为页拆分。 页拆分可为新记录腾出空间,但是执行页拆分可能需要花费一定的时间,此操作会消耗大量资源。 此外,它还可能造成碎片,从而导致 I/O 操作增加。 如果经常发生页拆分,可通过使用新的或现有的填充因子值来重新生成索引,从而重新分发数据。 有关详细信息,请参阅重新组织和重新生成索引。
虽然采用较小的非零填充因子值可减少随着索引的增长而拆分页的需求,但是索引将需要更多的存储空间,并且会降低读取性能。 即使对于面向许多插入和更新操作的应用程序,数据库的读取次数一般也会超过数据库写入次数的 5 到 10 倍。 因此,指定一个不同于默认值的填充因子会降低数据库的读取性能,而降低量与填充因子设置的值成反比。 例如,当填充因子的值为 50 时,数据库的读取性能会降低两倍。 读取性能降低是因为索引包含较多的页,因此增加了检索数据所需的磁盘 I/O 操作。
将数据添加到表的末尾
如果新数据在表中均匀分布,则不是 0 或 100 的非零填充因子对性能有利。 但是,如果所有数据都添加到表的末尾,则不会填充索引页中的可用空间。 例如,如果索引键列是 IDENTITY 列,则新行的键将总是增加,并且索引行在逻辑意义上将添加到索引的末尾。 如果将用加长行的大小的数据来更新现有行,则请使用小于 100 的填充因子。 每页上的额外字节将有助于把行中的额外长度造成的页拆分降低到最小限度。
安全性
权限
要求对表或视图具有 ALTER 权限。 用户必须是 sysadmin 固定服务器角色的成员,或者是 db_ddladmin 和 db_owner 固定数据库角色的成员。
使用 SQL Server Management Studio


使用表设计器指定填充因子
在对象资源管理器中,单击加号以便展开包含您要指定索引填充因子的表的数据库。
单击加号以便展开 “表” 文件夹。
右键单击你要指定索引的填充因子的表,然后选择“设计”。
在“表设计器”菜单上,单击“索引/键”。
选择您要指定填充因子的索引。
展开 “填充规范”,选择 “填充因子” 行并在行中输入所需的填充因子。
单击 “关闭”。
在“文件”菜单上,选择“保存”以保存 table_name。
使用对象资源管理器为索引指定填充因子
在对象资源管理器中,单击加号以便展开包含您要指定索引填充因子的表的数据库。
单击加号以便展开 “表” 文件夹。
单击加号以展开您要指定索引的填充因子的表。
单击加号以便展开 “索引” 文件夹。
右键单击要指定填充因子的索引,然后选择“属性”。
在 “选择页”下,选择 “选项”。
在 “填充因子” 行中,输入所需的填充因子。
单击“确定” 。
使用 Transact-SQL



在现有索引中指定填充因子
在 “对象资源管理器”中,连接到 数据库引擎的实例。
在标准菜单栏上,单击 “新建查询”。
将以下示例复制并粘贴到查询窗口中,然后单击 “执行”。 该示例重新生成现有索引,并在重新生成操作过程中应用指定的填充因子。


USE AdventureWorks2012;  
GO  
-- Rebuilds the IX_Employee_OrganizationLevel_OrganizationNode index   
-- with a fill factor of 80 on the HumanResources.Employee table.  

ALTER INDEX IX_Employee_OrganizationLevel_OrganizationNode ON HumanResources.Employee  
REBUILD WITH (FILLFACTOR = 80);   
GO  

为索引指定填充因子的其他方法
在 “对象资源管理器”中,连接到 数据库引擎的实例。
在标准菜单栏上,单击 “新建查询”。
将以下示例复制并粘贴到查询窗口中,然后单击 “执行”。


USE AdventureWorks2012;  
GO  
/* Drops and re-creates the IX_Employee_OrganizationLevel_OrganizationNode index on the HumanResources.Employee table with a fill factor of 80.  
*/  

CREATE INDEX IX_Employee_OrganizationLevel_OrganizationNode ON HumanResources.Employee  
   (OrganizationLevel, OrganizationNode)   
WITH (DROP_EXISTING = ON, FILLFACTOR = 80);   
GO  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值