Отключить и снова включить все индексы в базе данных SQL Server

Другое событие NullPointerException возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.

String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals для гарантированного непустого объекта.

Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null.

Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.

String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

24
задан Eran Meir 12 April 2016 в 20:52
поделиться

3 ответа

Мы можем использовать приведенный ниже скрипт для отключения индексов

ALTER INDEX ALL ON [TableName]
DISABLE;

Сделайте массовую вставку в таблицу и затем запустите следующий скрипт.

ALTER INDEX ALL ON [TableName]
REBUILD;
23
ответ дан JustinKSU 12 April 2016 в 20:52
поделиться

Вам нужно будет запустить скрипт, который выбирает метаданные для таблицы и индекса. Затем вы можете выполнить:

ALTER INDEX indexname ON tablename DISABLE; 

Позже вы можете запустить аналогичный скрипт для перестройки:

ALTER INDEX indexname ON tablename REBUILD; 

Вы можете сделать это по одному или собрать их в NVARCHAR ( MAX) и выполняйте их как один пакет. Вы можете увидеть пример кода в этом предыдущем вопросе:

Отключить все некластеризованные индексы

3
ответ дан Community 12 April 2016 в 20:52
поделиться

Используйте этот скрипт для отключения всех индексов

-- Disable All Indices
DECLARE @Script NVARCHAR(MAX)
DECLARE curIndices CURSOR FAST_FORWARD READ_ONLY FOR
    SELECT 'ALTER INDEX ' + QUOTENAME(indices.name) + ' ON ' + QUOTENAME(SCHEMA_NAME(tableNames.schema_id))+'.'+ QUOTENAME(tableNames.name) + ' DISABLE'
    FROM
        sys.indexes indices  INNER JOIN 
        sys.tables tableNames ON indices.object_id = tableNames.object_id
    WHERE 
        indices.type_desc = 'NONCLUSTERED' AND 
        indices.name IS NOT NULL AND
        indices.is_disabled = 0;
OPEN curIndices
FETCH NEXT FROM curIndices INTO @Script
WHILE @@FETCH_STATUS = 0
BEGIN
    PRINT @Script
    EXECUTE sp_executesql @Script 

    FETCH NEXT FROM curIndices INTO @Script
END
CLOSE curIndices
DEALLOCATE curIndices

Используйте этот скрипт для перестройки (включения) всех индексов

-- Rebuild All Indices
DECLARE @Script NVARCHAR(MAX)
DECLARE curIndices CURSOR FAST_FORWARD READ_ONLY FOR
    SELECT 'ALTER INDEX ' + QUOTENAME(indices.name) + ' ON ' + QUOTENAME(SCHEMA_NAME(tableNames.schema_id))+'.'+ QUOTENAME(tableNames.name) + ' REBUILD'
    FROM
        sys.indexes indices  INNER JOIN 
        sys.tables tableNames ON indices.object_id = tableNames.object_id
    WHERE 
        indices.type_desc = 'NONCLUSTERED' AND 
        indices.name IS NOT NULL AND
        indices.is_disabled = 1;
OPEN curIndices
FETCH NEXT FROM curIndices INTO @Script
WHILE @@FETCH_STATUS = 0
BEGIN
    PRINT @Script
    EXECUTE sp_executesql @Script 

    FETCH NEXT FROM curIndices INTO @Script
END
CLOSE curIndices
DEALLOCATE curIndices
0
ответ дан Fred 12 April 2016 в 20:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: