перестроить все индексы во всех таблицах, но необходимо исключить определенные таблицы - PullRequest
0 голосов
/ 07 января 2019

Я искал способ перестроить все индексы во всех таблицах и нашел скрипт, который это делает, но я хотел бы получить 6 конкретных таблиц, чтобы не получить перестроение индекса.

Как я могу добиться этого с помощью приведенного ниже сценария. В SQL я могу добавить условие where, например: где таблица не в ('table1', 'table2').

USE sparcsn4prod

DECLARE @TableName varchar(255)

DECLARE TableCursor CURSOR FOR
SELECT table_name FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE='base table'


OPEN TableCursor 


FETCH NEXT FROM TableCursor INTO @Tablename
WHILE @@FETCH_STATUS=0

BEGIN

DBCC DBREINDEX(@TableName,' ',90)

FETCH NEXT FROM TableCursor INTO @Tablename

END

CLOSE TableCursor

DEALLOCATE TableCursor

Ответы [ 2 ]

0 голосов
/ 07 января 2019

Вместо того, чтобы заново изобретать колесо, я предлагаю вам рассмотреть возможность использования решения Олы Халленгрен для технического обслуживания . Это позволяет исключить определенные базы данных, таблицы или индексы из обычного ведения индекса.

Приведенное ниже значение параметра dbo.IndexOptimize оптимизирует все индексы, кроме указанной таблицы.

@Indexes = N'ALL_INDEXES, -YourDB.YourSchema.YourTable'
0 голосов
/ 07 января 2019

За исключением того факта, что я считаю, что курсоры являются одним из худших изобретений во вселенной SQL Server (по крайней мере, в соответствии с обработкой и производительностью), вы можете просто расширить определение курсора, чтобы отфильтровать нежелательные имена таблиц:

DECLARE TableCursor CURSOR FOR
SELECT table_name FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE='base table'
  AND TABLE_NAME NOT IN ('table1','table2','table3')
OPEN TableCursor 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...