在工作中,我们有一个 250GB 的数据库,其中包含几个非常大的表。每 48 小时运行一次的维护计划之一会对所有表执行重新索引。这大约需要四个小时,目前正在审核中。
需要讨论的参数之一是我们应用于这些索引的填充因子。创建和重建索引时,它们指定了 FILLFACTOR=90。
我们有一个 40GB 的表和 40GB 的索引。使用 FILLFACTOR=90 时,我相信索引中会有 4GB 的可用空间,考虑到表每天的增长不超过 100mb(即 48 小时内增长 200mb),这似乎很多。FILLFACTOR=99(400mb 可用索引空间)会降低 INSERT 性能吗?
假设索引的更新是随机的(即均匀分布如文章末尾所述)并且表数据的增量相对较小(例如,1000 万行中每天有 10,000 行发生变化),FILLFACTOR = 90(4gb 可用索引空间)有什么好处,还是应该使用 FILLFACTOR = 99(提供 400mb 可用索引空间)?
答案1
首先,我会质疑整个重新索引 - 考虑到表大小等。每隔一天进行一次索引没有什么意义。每周/每月一次 - 可以,但不是每隔一天。
填充因子 99 可能会导致轻微的过度读取 - 即使是随机的,分布也不会完全均匀(即会有随机聚类)。90% 可能会留下太多的自由空间 - 95 到 97 可能会更好......
...但最终它不会产生重大差异。
建议:尝试一下。绝对不要经常重新索引。