【问题标题】:Composite Primary Key Index Maintenance复合主键索引维护
【发布时间】:2012-08-12 19:27:04
【问题描述】:

在一张大表上有一个由 3 部分组成的复合键 Int、Int、Int 插入速度因碎片而降低

PK1 不分段(插入按顺序排列,从未修改过) 但是 PK2 和 PK3 的碎片又快又坏

我应该使用什么策略来维护索引?

有没有办法重建索引?

PK1 fill factor 100 
PK2 fill factor 10
PK3 fill factor 10

【问题讨论】:

  • 不 - 它是 ONE 索引 - 你不能在单个索引的列上具有不同的填充因子...索引结构是由(PK1, PK2, PK3) 的条目和这个组合的元组存储在页面上。您只能为索引/页面设置填充因子 - 不能为复合索引的各个部分设置......
  • @marc_s 这就是我的想法。我的策略是否应该是 100 填充因子并且经常重建。或者我应该尝试 50%。现在,在加载两个小时后,该索引有 60% 是碎片化的。我知道你尝试过什么。有没有我应该尝试的填充因子。
  • 将填充因子降低到那么低会真正增加索引的大小。这可能不是一个好主意。您能否向我们展示一下表格结构?很难准确说出碎片的来源。更新:没有看到以前的评论忽略这个
  • 我的典型方法是在我怀疑存在碎片的索引上使用 70% 或 80% 之类的值,然后观察。看看它碎片的速度和严重程度。如果当天晚些时候无法忍受 - 进一步降低填充因子。通常情况下,使用 70-80% 的填充因子,您在白天应该没问题,如果您每晚重建这些关键索引,您的系统应该可以正常工作。
  • 字面意思是组合PK Int, Int, Int的表结构,没有其他数据。都有FK关系。 PK1 按顺序加载。 PK2 和 PK3 随机加载。每个 PK1 大约有 10 行。使用 insert values() () () 一次加载 1 个 PK1。我不介意在负载期间使该索引变大。一旦我们加载了数据,将以 100% 重新索引

标签: sql-server-2008-r2 indexing


【解决方案1】:

不-它是一个索引-单个索引的列上不能有不同的填充因子...索引结构由(PK1, PK2, PK3)的条目组成,并且这个元组组合存储在页面上。您只能为索引/页面设置填充因子 - 不能为复合索引的各个部分设置。

我的典型方法是对我怀疑存在碎片的索引使用 70% 或 80% 之类的值,然后进行观察。看看它碎片的速度和严重程度。如果当天晚些时候无法忍受 - 进一步降低填充因子。通常,使用 70-80% 的填充因子,您在白天应该没问题,如果您每晚重建这些关键索引,您的系统应该可以正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-21
    相关资源
    最近更新 更多