Microsoft SQL Server 2008 - 非群集,非唯一索引上的99%碎片

JMo*_*gan 6 sql-server entity-framework-4

我有一个包含多个索引的表(定义如下).无论重建/重新组织索引,其中一个索引(IX_external_guid_3)都有99%的碎片.任何人都知道可能导致这种情况的原因,还是解决问题的最佳方法?

我们使用Entity Framework 4.0来查询它,其他索引字段上的EF查询平均比external_guid_3字段快10倍,但是ADO.Net查询的速度大致相同(尽管比EF查询慢2倍)索引字段).

  • id(PK,int,not null)
  • guid(uniqueidentifier,null,rowguid)
  • external_guid_1(uniqueidentifier,not null)
  • external_guid_2(uniqueidentifier,null)
  • state(varchar(32),null)
  • value(varchar(max),null)
  • 信息集(XML(.),null) - >通常为2-4K
  • created_time(datetime,null)
  • updated_time(datetime,null)
  • external_guid_3(uniqueidentifier,not null)
  • FK_id(FK,int,null)
  • locking_guid(uniqueidentifer,null)
  • locked_time(datetime,null)
  • external_guid_4(uniqueidentifier,null)
  • corrected_time(datetime,null)
  • is_add(bit,not null)得分(int,null)
  • row_version(timestamp,null)

索引

  • PK_table(集群)
  • IX_created_time(非唯一,非群集)
  • IX_external_guid_1(非唯一,非群集)
  • IX_guid(非唯一,非群集)
  • IX_external_guid_3(非唯一,非群集)
  • IX_state(非唯一,非群集)

JMo*_*gan 4

它实际上看起来就像在 guid 上建立索引可能是罪魁祸首: http://www.sqlskills.com/blogs/paul/can-guid-cluster-keys-cause-non-clustered-index-fragmentation/

最近我发现了一些似乎支持这一点的参考文献。