EmailAddress列非聚集索引的fill factor(填充因子)最优设置问询
随机排序键非聚集索引填充因子设置指南
适用场景匹配
你当前的场景完全符合随机键非聚集索引的典型特征:非聚集索引键EmailAddress为随机排序值、表读写频繁、仅追加写入无频繁更新/删除操作。
为什么填充因子设为0会产生严重碎片
填充因子为0等同于100,代表索引页会被完全填满。由于
EmailAddress是随机值,新写入的索引行不会按顺序追加到索引的末尾,而是要插入到索引页的中间位置,已满的索引页只能触发页拆分操作,大量页拆分就会直接导致索引逻辑碎片快速上升。
参考设置规范
- 初始推荐值:80,通用适配读写均衡的随机键非聚集索引场景,预留20%的页空间容纳随机插入的新行,可降低90%以上的不必要页拆分
- 若业务写入QPS远高于读取,可下调到70~75,进一步降低页拆分概率
- 若业务读取QPS远高于写入,可上调到85~90,减少存储空间浪费,提升读扫描性能
- 调整验证方法:
- 每次调整后至少运行1个业务周期(建议7天以上)再统计索引指标,碎片率稳定在5%以内代表设置合理
- 若索引页平均填充度长期低于70%,可适当调高填充因子减少空间占用
- 配置命令示例(SQL Server):
ALTER INDEX IX_Person_EmailAddress ON Person REBUILD WITH (FILLFACTOR = 80);
注意事项
由于
EmailAddress是变长字符串类型,索引行长度本身存在波动,上述参考区间已经覆盖了常规的变长字段长度波动,不需要额外再降低填充因子预留空间。
内容的提问来源于stack exchange,提问作者Brian Vallelunga
相关产品推荐
相关产品推荐

