此SQL Server约束中的PAD_索引的用途是什么?
我对我的一个表应用了以下约束,但我不知道PAD_索引是什么意思 有人能启发我吗此SQL Server约束中的PAD_索引的用途是什么?,sql,sql-server,indexing,Sql,Sql Server,Indexing,我对我的一个表应用了以下约束,但我不知道PAD_索引是什么意思 有人能启发我吗 CONSTRAINT [PK_Employees] PRIMARY KEY CLUSTERED ( [EmployeeId] ASC ) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY] ^--------------^ this part here 发件人: PAD_索引={ON|OFF} 指定索引填充
CONSTRAINT [PK_Employees] PRIMARY KEY CLUSTERED
(
[EmployeeId] ASC
) WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
^--------------^
this part here
发件人:
PAD_索引={ON|OFF}
指定索引填充。默认设置为关闭
关于:
fillfactor指定的可用空间百分比应用于索引的中间级别页面
未指定关闭或填充因子:
考虑到中间页上的键集,中间级页被填充到接近容量,为索引可以具有的最大大小的至少一行留出足够的空间
PAD_INDEX选项仅在指定FILLFACTOR时有用,因为PAD_INDEX使用FILLFACTOR指定的百分比。如果为FILLFACTOR指定的百分比不够大,无法容纳一行,则数据库引擎会在内部重写该百分比以容纳最小值。无论fillfactor的值有多低,中间索引页上的行数永远不少于两行
在向后兼容的语法中,WITH PAD_INDEX等同于WITH PAD_INDEX=ON。SQL Server中的索引是
- 填充因子适用于底层
这是下图中的叶节点/数据层 - PAD_INDEX ON表示“将填充因子应用于所有层”
这是下图中的中间级别(根和数据之间)
基本上,如果您希望定期对索引进行大量随机更改,可以将PAD_INDEX=设置为打开 这有助于避免索引页拆分
当我期望索引中包含的30%以上的随机记录定期被删除时,我将其设置为打开 这实际上是一个非常复杂的问题打开PAD_索引会对大型表中的读取性能和内存压力产生显著影响。桌子越大,效果越大。作为一个规则,我会说你想放弃它,除非你属于一些不寻常的类别。然后,仔细遵循此建议。正如我在下面的示例中所展示的,当PAD_INDEX打开时调整FILLFACTOR可能会产生指数效应,需要仔细平衡
CREATE CLUSTERED INDEX [IX_z_arch_export_dzienny_pre] ON [dbo].[z_arch_export_daily_pre]
(
[Date] ASC,
[Object Code] ASC,
[From date] ASC,
[Person_role] ASC,
[Departure] ASC,
[Room code] ASC,
[period_7_14] ASC
)WITH (PAD_INDEX = ON, FILLFACTOR=100)
insert into z_arch_export_daily_pre
select * from export_daily_pre
order by [Date] ASC,[Object Code] ASC,[From date] ASC,[Person_role] ASC,[Departure] ASC,[Room code] ASC,[period_7_14] ASC