Sql 在多个数据库中为同一表编制索引
我有将近150个数据库和所有相同的表。我知道这很糟糕,但我无法控制。我试图通过一些索引来提高性能。我知道索引应该是什么,但我需要在每个数据库的相同表上构建它们。有没有办法做到这一点呢?我之前也遇到过类似的情况,所以我想出了这段代码。您可以将动态SQL与spmsforeachdb一起使用,在数据库中循环。我已经排除了下面的系统数据库,但是您可以在第一个Sql 在多个数据库中为同一表编制索引,sql,sql-server,indexing,Sql,Sql Server,Indexing,我有将近150个数据库和所有相同的表。我知道这很糟糕,但我无法控制。我试图通过一些索引来提高性能。我知道索引应该是什么,但我需要在每个数据库的相同表上构建它们。有没有办法做到这一点呢?我之前也遇到过类似的情况,所以我想出了这段代码。您可以将动态SQL与spmsforeachdb一起使用,在数据库中循环。我已经排除了下面的系统数据库,但是您可以在第一个IF中根据需要包括/排除数据库 这段代码将检查每个数据库中的特定表,并检查该表上是否已经存在该索引。如果不是,它就会创建它。我包含了一个RAISER
IF
中根据需要包括/排除数据库
这段代码将检查每个数据库中的特定表,并检查该表上是否已经存在该索引。如果不是,它就会创建它。我包含了一个RAISERROR
,以在SSMS消息中显示数据库的进度。只需更改下面的表/索引名称,并根据需要更新createindex
语句
DECLARE @command varchar(1000)
SELECT @command = 'IF ''?'' NOT IN(''master'', ''model'', ''msdb'', ''tempdb'')
BEGIN USE ?
EXEC(''
DECLARE @DB VARCHAR(200)
SET @DB = DB_NAME()
RAISERROR (@DB, 10, 1) WITH NOWAIT
IF OBJECT_ID(''''dbo.TableName'''', ''''U'''') IS NOT NULL
BEGIN
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name=''''IX_TableName'''' AND object_id = OBJECT_ID(''''TableName''''))
BEGIN
CREATE INDEX [IX_TableName] ON TableName (indexColumn)
END
END
'') END'
EXEC sp_MSforeachdb @command
创建用于创建索引的脚本,并使用类似于sp_msforeachdb的过程在所有数据库中运行它。这是否回答了您的问题?