在大型表上创建聚集索引的无痛方法?


22

因此,我们有一个客户站点抱怨性能严重下降。我看了一眼,很明显,问题出在因为Somebody Else(grrrr)设计了一个表,该表包含大约2000万条记录而没有聚簇索引。

现在,我想在该表上创建聚簇索引-但是在我的测试环境中,我的create index命令已经运行了一个小时,但仍未完成。客户站点是一个工作日为24/7的车间,在创建索引时无法承受一个小时的停机时间。

是否有一些不那么费力的方法来创建索引,该索引要么可以快速完成工作,要么以某种聪明的方式完成工作,而这种忙碌的工作不会完全破坏服务器的性能?

我们正在使用SQL Server企业版。

Answers:


26
  • 如果您的SQL Server是Enterprise +版本,并且表没有任何BLOB字段- CREATE CLUSTERED INDEX ... WITH(ONLINE=ON)

  • 如果不是,除了建立具有相同架构的表并将数据明智地传输到表(包括所有INSERT / UPDATE / DELETE操作(例如,使用触发器),然后准确地删除旧表并重命名)之外,没有任何其他方法新名称与旧名称相同-缺点是:速度慢,会增加服务器和存储的额外负载


12

不确定客户使用的是哪个版本的SQL Server。在企业中,可以使用(ONLINE = ON)来建立索引,因此在创建索引之前该表一直可用。


8
  • 创建与原始表相同的新表(显然将需要使用其他名称)
  • 在新表上创建聚簇索引
  • 将数据加载到新表中
  • 放下原始表
  • 使用原始名称重命名新表

确保您应用了原始文档所需的所有权限。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.