Sql server SQL Server:如何更改索引的联机属性的默认值?
我需要将几乎所有索引的Sql server SQL Server:如何更改索引的联机属性的默认值?,sql-server,indexing,Sql Server,Indexing,我需要将几乎所有索引的ONLINE选项的默认值更改为ON,以便使用此脚本重建索引: ALTER INDEX [Index1]|ALL ON [Table1] REBUILD; CREATE NONCLUSTERED INDEX [Index1] ON [Table1] ( [Column1] ASC ) WITH (ONLINE = ON) 将执行以下操作: ALTER INDEX [Index1]|ALL ON [Table1] REBUILD WITH (ONLINE = ON);
ONLINE
选项的默认值更改为ON
,以便使用此脚本重建索引:
ALTER INDEX [Index1]|ALL ON [Table1] REBUILD;
CREATE NONCLUSTERED INDEX [Index1] ON [Table1]
(
[Column1] ASC
)
WITH (ONLINE = ON)
将执行以下操作:
ALTER INDEX [Index1]|ALL ON [Table1] REBUILD WITH (ONLINE = ON);
我必须在不重新创建索引的情况下执行此操作
但是,奇怪的是,使用此脚本创建索引:
ALTER INDEX [Index1]|ALL ON [Table1] REBUILD;
CREATE NONCLUSTERED INDEX [Index1] ON [Table1]
(
[Column1] ASC
)
WITH (ONLINE = ON)
结果索引中的联机
选项设置为打开关闭
:-
修复方法: 我发现这是不可能的。
ONLINE
选项不保存在任何位置,它只影响创建或重建索引的当前语句,即使某些选项保存在sys.indexes
表中。
不指定ONLINE
选项将使用默认值OFF
运行脚本。
修复方法是使用上的上的选项显式更新所有重建索引脚本,并确保它将在支持此功能的SQL Server版本(企业版和开发人员版)上运行,并且只在线重建允许的索引。
无法联机重建的索引有:
- 禁用聚集索引
- 禁用索引视图
- Image、ntext、text、varchar(max)、nvarchar(max)、varbinary(max)、XML索引
- 列存储索引
- 本地临时表上的索引
USE [DATABASE_NAME];
GO
EXEC sp_MSforeachtable @command1="print 'rebuilding indexes in table: ?'", @command2="ALTER INDEX ALL ON ?
REBUILD WITH (ONLINE=ON)";
GO
- 注意:上面的脚本假定您当前版本的SQL 服务器支持在线索引重建。在另一种情况下,你可以 修改脚本以脱机执行索引重建
ONLINE
就像SORT\u IN_TEMPDB
不是索引属性,它只是CREATE
/ALTER index
语句的一个选项
因此,此选项仅影响当前语句,并且不会保存在索引的元数据中。语句“ALTER index ALL ON TAble1 REBUILD WITH(ONLINE=ON)”使用显式选项重建索引,我希望避免这种情况。这些选项:ALLOW\U ROW\U LOCKS、ALLOW\U PAGE\U LOCKS和FILLFACTOR似乎是持久化的。我可以看到,当从创建的索引生成创建索引脚本时。>>>这些选项:ALLOW_ROW_LOCKS、ALLOW_PAGE_LOCKS和FILLFACTOR都是持久化的。当然,但作为一个选项而不是属性并不意味着它不会持久化。因此,有些选项会持久保存在“sys.indexes”表中,有些则不会。谢谢你,@sepupic!