【问题标题】:Indexing same table in multiple databases在多个数据库中索引同一个表
【发布时间】:2021-05-14 12:40:07
【问题描述】:

我有近 150 个数据库,其中包含所有相同的表。我知道这很糟糕,但我无法控制它。我正在尝试使用一些索引来提高性能。我知道索引应该是什么,但我需要在每个数据库的相同表上构建它们。除了单独创建它们之外,还有其他方法吗?

【问题讨论】:

标签: sql sql-server indexing


【解决方案1】:

前段时间我也遇到过类似的情况,所以我想出了这段代码。您可以使用带有sp_MSforeachdb 的动态SQL 来循环访问您的数据库。我已经排除了下面的系统数据库,但您可以在第一个 IF 中随意包含/排除数据库。

此代码将检查您的特定表的每个数据库,并检查该表上是否已存在该索引。如果没有,它会创建它。我在 SSMS 消息中添加了一个 RAISERROR 以显示数据库的进度。只需更改下面的表/索引名称并根据您的需要更新 CREATE INDEX 语句。

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 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-05
    • 1970-01-01
    • 2021-02-14
    • 1970-01-01
    相关资源
    最近更新 更多