【发布时间】:2014-08-19 00:22:31
【问题描述】:
我在 Azure 中有一个超过一百万行的表,我正在尝试使用以下 SQL 添加聚集索引:
CREATE CLUSTERED INDEX IX_MyIdxName
ON [MyApp].MyTable([MyColumn])
WITH (DROP_EXISTING=ON)
ON [Primary]
当我通过网络界面执行此操作时,它运行了一个多小时,然后失败并出现错误:
Failed to read the status of the response
如果我通过 SQL Management Studio 执行此操作,它会运行半小时然后失败并出现错误:
40552: The session has been terminated because of excessive transaction log
space usage. Try modifying fewer rows in a single transaction.
我明白它在说什么,但我能做些什么呢?我想创建这个聚集索引,那么如何解决这个事务日志大小问题?
谢谢
【问题讨论】:
-
使用所需的聚集索引创建一个单独的表,然后以块的形式移动数据,例如一次 10,000 行。 Roughly similar concept to this。然后删除旧表并重命名新表。
-
我正要提出与 Aaron Bertrand 相同的建议 - 这不是一个有趣的解决方案,但它应该可以工作。
-
呸。好,谢谢。如果有人想让它成为答案,我可以标记它。
标签: sql sql-server azure azure-sql-database clustered-index