如何检查SQL Server索引填充因子
假如您有一个盛满水的玻璃杯,您要尝试再向这个玻璃杯中加水。结果会怎样呢?水会溢出来。
SQL Server 的情况也是如此。当索引页填充满时,如果尝试添加新行,则 SQL Server 会将大约一半的行移动到新页,以便为新添加的行腾出空间。这就是通常所说的“页面分割”。页面分割可为新记录腾出空间,但却既费时又非常耗费资源,并且会产生碎片,从而可能对 I/O 操作产生负面影响。那么,如何避免此类情况呢?
要防止此类情况的发生,必须主动确定填充因子值。创建或重新构建索引后,填充因子值会确定每个叶级页中用于填充数据的空间百分比,其余部分留作将来扩充之用。例如,将填充因子值配置为 60 就意味着每个叶级页的 40% 都是空的,以便在向基础表中添加数据时为索引扩展提供空间。
默认填充因子值始终是 0,此值对大多数情况都适用。一般来讲,填充因子值为 0 意味着叶级别几乎已填满,但留出了一些空间,至少能再添加一个索引行。(请注意,填充因子为 0 和 100 是相似的。)
您可以在 CREATE INDEX 或 ALTER INDEX 语句中设置各个索引的填充因子值,也可以直接在服务器级别上配置此值,以便所有新建索引都使用默认值。
以下示例在服务器级别将填充因子值设置为 70%,这就意味着您将有 30% 的可用空间供以后扩展使用。当然,在实施到生产环境前,必须先认真测试此选项。
USE Master; GO SP_Configure 'show advanced options',1; GO SP_Configure 'Fill Factor', 70; GO --必须重新启动 SQL Server 引擎以使更改生效。
如果您希望在单个索引级别上配置填充因子,应如何操作呢?假设您正在构建下表,并希望对名为 Col_A 的列创建唯一索引,且填充因子值为 70。此时该命令应类似于下面的命令:
相关文章
- SQL Server-聚焦强制索引查询条件和Columnstore Index(九)
- SQL Server-聚焦使用索引和查询执行计划(五)
- SQL Server索引 - 聚集索引、非聚集索引、非聚集唯一索引
- Sql server在另一台服务器,在Visual Studio 中没问题,IIS中 提示“在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。。。。”
- SQL Server 2008 转换为 SQL 2005 数据库 脚本生成方式(解决主键、索引、标识等数据库约束丢失)
- sql server 小技巧(5) Sql server 获取指定字符后的所有字符 - 去掉指定字符前的所有字符
- SQL Server索引的维护 - 索引碎片、填充因子 <第三篇>
- T-SQL查询高级—SQL Server索引中的碎片和填充因子
- 程序员眼中的 SQL Server-执行计划教会我如何创建索引?
- T-SQL查询高级--理解SQL SERVER中非聚集索引的覆盖,连接,交叉和过滤
- SQL Server-聚焦过滤索引提高查询性能
- SQL Server-聚焦强制索引查询条件和Columnstore Index
- SQL Server 查询性能优化——创建索引原则(一)
- SQL Server创建复合索引时,复合索引列顺序对查询的性能影响
- 【sql server压测】sql server使用Diskspd测试SQL Server IO存储
- 最小配置启动SQL SERVER,更改SQL Server最大内存大小导致不能启动的解决方法
- (4.6)sql server索引缺失提示
- (3.7)sql server存储引擎--索引的结构与分类
- SQL Server中的索引结构与疑惑
- SQL Server索引视图以(物化视图)及索引视图与查询重写