【问题标题】:Reorganizing indexes and database size重新组织索引和数据库大小
【发布时间】:2014-08-01 07:38:18
【问题描述】:

我的生产数据库存在碎片问题。我的一个主要数据表的大小约为 6GB(3GB 索引)(约 9M 条记录),并且有 94%(!)的索引碎片。

我知道重组索引可以解决这个问题,但是我的数据库在 SQL Server 2008R2 Express 上,它有 10GB 的数据库限制,我的数据库已经是 8GB。

我已经阅读了几篇关于这个问题的博客文章,但没有回答我的情况。

我的问题1是: 重组该表上的索引后,我预计会增加多少大小(% 或 GB)?

问题2: Drop Index -> Build same index 会占用更少的空间吗?目前,时间对我来说不是一个因素。

补充问题: 对于数据库碎片还有其他建议吗?我只知道避免像火一样收缩;)

【问题讨论】:

  • 避免使用GUID(唯一标识符)作为您的集群键 - 这会很快导致 94% 的索引碎片......

标签: tsql sql-server-2008-r2 sql-server-2008-express


【解决方案1】:

在关键列上使用 INDEX 将通过消除对表扫描的需要来改进连接和过滤器。维护良好的索引可以显着提高性能。

GUID 对索引列的选择很差是正确的,但这绝不意味着您不应该创建这些索引。理想情况下,建议使用 INT 或 BIGINT 数据类型。

对我来说,添加 NEWID() 作为默认值已经显示出在抵消索引碎片方面的一些改进,但如果所有替代方法都失败了,您可能需要比其他索引更频繁地进行索引维护(重建、重组)操作。 Reorganize 需要一些工作空间,但在您的情况下,因为时间不是问题,我会禁用索引、缩小数据库并创建索引。

【讨论】:

  • 该表有一个 GUID 作为聚集索引,据我观察,它在 4 天(2 个“工作”天)内从接近 0 的碎片变为 40%。很遗憾我无能为力,因为存储在此表和相关表中的数据至关重要,我什至不会开始介绍其他识别记录的方法。感谢您的回答!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-16
  • 1970-01-01
  • 2014-07-07
  • 2013-11-22
  • 1970-01-01
  • 1970-01-01
  • 2022-11-12
相关资源
最近更新 更多