创建索引是否需要停机

Mat*_*ics 1 sql-server sql-server-2012

我们有一张包含几百万行的生产表。我们运行了这个查询,它冻结了我们的数据库,

USE ExampleDatabase

GO
CREATE NONCLUSTERED INDEX IX_Table1_URL
ON [dbo].[Table1] ([URL])
GO

GO
CREATE NONCLUSTERED INDEX IX_Table1_LastModified
ON [dbo].[Table1] ([LastModified])
GO

GO
CREATE NONCLUSTERED INDEX IX_Table2_URL
ON [dbo].[Table2] ([URL])
GO

GO
CREATE NONCLUSTERED INDEX IX_Table2_LastModified2
ON [dbo].[Table2] ([LastModified2])
GO
Run Code Online (Sandbox Code Playgroud)

我是一名对索引知识非常有限的开发人员,我不知道从哪里开始,只是添加 Table1 和 Table2 都有数百万行。

Bre*_*zar 12

如果您使用的是 SQL Server Enterprise Edition,则可以添加 ONLINE 开关:

CREATE NONCLUSTERED INDEX IX_Table1_URL
ON [dbo].[Table1] ([URL])
WITH (ONLINE=ON);
GO
Run Code Online (Sandbox Code Playgroud)

大多数索引创建将在没有阻塞的情况下发生,尽管不是全部 -阅读此 DBA.se 问答以了解有关甚至在线索引创建何时阻塞其他查询的详细信息

但是,在创建索引期间,您的服务器可能仍会慢得多 - 创建索引可能是一项艰巨的工作,会占用 SQL Server 的存储空间。