seb*_*eid 7 sql-server sql-server-2008-r2
在我们的生产数据库中有一个 180 GB 的表,大约有 200 万条记录,我想将它重新创建为新文件组中的新空表并删除现有表。在不影响数据库性能的情况下执行此任务的最佳实践是什么?
我的时间将用于重命名和删除表。
我想补充一点,这是一个非常高负载的数据库,所以我不想获得任何锁或长时间运行的查询。
Aar*_*and 11
删除旧表并在事务中重命名新表:
BEGIN TRANSACTION;
DROP TABLE dbo.OldTable;
EXEC sys.sp_rename N'dbo.NewTable', N'OldTable', N'OBJECT';
COMMIT TRANSACTION;
Run Code Online (Sandbox Code Playgroud)如果您担心掉落本身需要多长时间,您可以这样做:
BEGIN TRANSACTION;
EXEC sys.sp_rename N'dbo.OldTable', N'garbage', N'OBJECT';
EXEC sys.sp_rename N'dbo.NewTable', N'OldTable', N'OBJECT';
COMMIT TRANSACTION;
DROP TABLE dbo.garbage;
Run Code Online (Sandbox Code Playgroud)
(从技术上讲,drop 不必成为交易的一部分,并且在任何情况下都不应该导致任何阻塞,所以现在 drop 实际需要多长时间在很大程度上无关紧要,因为它没有机会阻塞任何人。 )
如果您有索引、外键等,您还必须处理这些,但以上是您将获得的最快速度,因为它主要是元数据(最坏的情况是DROP将被现有活动阻止)。
如果您的情况更复杂,另请参阅 Schema Switch-A-Roo第 1部分和第 2 部分。
| 归档时间: |
|
| 查看次数: |
5008 次 |
| 最近记录: |