Как изменить индекс для каждой таблицы в моей базе данных - PullRequest
5 голосов
/ 30 ноября 2011

Я использую SQL Server 2008 R2, мне нужно перестроить индекс для каждой таблицы в базе данных

Используя этот скрипт, я получаю сообщение об ошибке

USE myDb
GO

EXEC sp_MSForEachTable 'ALTER INDEX ALL ON ? REBUILD'

Ошибка:

Ошибка ALTER INDEX, поскольку следующие параметры SET имеют неправильные настройки: 'QUOTED_IDENTIFIER'.Убедитесь, что параметры SET верны для использования с индексированными представлениями и / или индексами для вычисляемых столбцов и / или отфильтрованных индексов и / или уведомлений о запросах, и / или методов типа данных XML, и / или операций с пространственным индексом.

Есть идеи, как это исправить?спасибо

Ответы [ 2 ]

9 голосов
/ 30 ноября 2011

SQL Fool (Мишель Аффорд) имеет отличный сценарий, чтобы сделать это для вас - все сделано и хорошо проверено многими пользователями.

Это отличная работа - она ​​позволяет вамчтобы определить уровни фрагментации, для которых вы

  • ничего не делаете
  • реорганизуете индекс
  • перестраиваете индекс

Не изобретайтеколесо - просто иди посмотри и используй скрипт!

1 голос
/ 30 ноября 2011

Простой подход, который я решил использовать для своих вопросов. Код от: http://blog.sqlauthority.com/2009/01/30/sql-server-2008-2005-rebuild-every-index-of-all-tables-of-database-rebuild-index-with-fillfactor/

   -- Rebuild eve Index for every Table in the Database.
    -- Resource: http://blog.sqlauthority.com/2009/01/30/sql-server-2008-2005-rebuild-every-index-of-all-tables-of-database-rebuild-index-with-fillfactor/
    USE [YourDbName]
    GO

    -- Show Fragmentation sample on YourTable Index.
    select avg_fragmentation_in_percent, avg_fragment_size_in_pages, fragment_count, avg_page_space_used_in_percent
    from sys.dm_db_index_physical_stats (DB_ID(), object_id('[dbo].[YourTableName]'), NULL, NULL, 'DETAILED')

    -- Cursor going over each table and rebuilding every index of database.
    DECLARE @TableName VARCHAR(255)
    DECLARE @sql NVARCHAR(500)
    DECLARE @fillfactor INT
    SET @fillfactor = 80
    DECLARE TableCursor CURSOR FOR
    SELECT OBJECT_SCHEMA_NAME([object_id])+'.'+name AS TableName
    FROM sys.tables
    OPEN TableCursor
    FETCH NEXT FROM TableCursor INTO @TableName
    WHILE @@FETCH_STATUS = 0
    BEGIN
    SET @sql = 'ALTER INDEX ALL ON ' + @TableName + ' REBUILD WITH (FILLFACTOR = ' + CONVERT(VARCHAR(3),@fillfactor) + ')'
    EXEC (@sql)
    FETCH NEXT FROM TableCursor INTO @TableName
    END
    CLOSE TableCursor
    DEALLOCATE TableCursor
    GO
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...