Как и все в SQL Server, «это зависит»
Есть издержки на поддержание индексов во время вставки и накладные расходы на перестройку индексов после вставки. Единственный способ окончательно определить, какой метод требует меньших затрат, - это попробовать их оба и сравнить их.
Если бы я был игроком, делающим ставки, я бы поставил на то, что если оставить индексы на месте, это приведет к полной перестройке, но у меня нет полной картины, чтобы сделать обоснованное предположение. Опять же, единственный способ узнать наверняка - попробовать оба варианта.
Одна из ключевых оптимизаций - убедиться, что ваша массовая вставка находится в порядке кластерных ключей.
Если я правильно читаю ваш вопрос, эта таблица в значительной степени закрыта (заблокирована) на время загрузки, и это проблема.
Если ваша основная цель - увеличить доступность / уменьшить блокировку, попробуйте использовать подход A / B-таблицы.
Подход A / B разбивается следующим образом:
Учитывая таблицу с именем «MyTable», вы фактически имеете две физические таблицы (MyTable_A и MyTable_B) и одно представление (MyTable).
Если MyTable_A содержит текущий «активный» набор данных, ваш вид (MyTable) выбирает все столбцы из MyTable_A. В то же время вы можете использовать карт-бланш для MyTable_B (который содержит копию данных MyTable_A и новых данных, которые вы пишете.) Как только MyTable_B загружен, проиндексирован и готов к работе, обновите представление «MyTable», указав MyTable_B и обрезав MyTable_A. ,
Этот подход предполагает, что вы готовы увеличить затраты на ввод-вывод и хранение (в вашем случае значительно) для поддержания доступности. Это также предполагает, что ваш большой стол также относительно статичен. Если вы придерживаетесь этого подхода, я бы порекомендовал второе представление, что-то вроде MyTable_old, которое указывает на неживую таблицу (т. Е. Если MyTable_A является текущей таблицей представления и на нее ссылается представление MyTable, MyTable_old будет ссылаться на MyTable_B). Вы бы обновили представление MyTable_old одновременно с обновлением представления MyTable.
В зависимости от характера данных, которые вы вставляете (и вашей версии / издания SQL Server), вы также можете воспользоваться преимуществами разделения ( Блог MSDN по этой теме. )