2009-09-02 2 views
0

Знаете ли вы, есть ли способ сделать это в SQL Server (2008)?индекс падения на уровне раздела

Я работаю над процессом загрузки DataWarehouse, поэтому я хочу отказаться от индексов загружаемого раздела, чтобы я мог быстро загрузить массовую загрузку, а затем я могу снова восстановить индекс на уровне раздела ,

Я думаю, что в Oracle это можно достичь, но, возможно, не в SQL Server.

спасибо, Виктор

ответ

1

Нет, вы не можете отбрасывать индексы таблицы только для одного раздела. Тем не менее, SQL 2008 предоставляет методологию для массовой загрузки, которая включает в себя настройку второй таблицы с точно такой же схемой на отдельном разделе в той же файловой группе, загрузкой ее, ее индексированием именно так, а затем «переключением» нового раздела с существующий пустой раздел в рабочей таблице.

Это очень упрощенное описание. Вот статья MSDN для SQL 2008 о реализации этого: http://msdn.microsoft.com/en-us/library/ms191160.aspx

+0

Спасибо за информацию, это именно то, что я искал. Фактически этим утром коллега объяснил мне этот подход. – river0

0

Я знаю, что это не было возможно в SQL 2005. Я не слышал ничего, что позволит вам сделать это в 2008 году, но это может быть там (я читал но еще не использовали его). Самое близкое, что я мог получить, - отключить индекс, но если вы отключите кластеризованный индекс, вы больше не сможете получить доступ к таблице. Не все это полезно, имхо.

Мое решение для нашего проекта складских проектов ETL заключалось в создании таблицы с перечислением всех индексов и ограничений индексирования (PKs, UQs). Во время ETL мы проходим через таблицу (для нужного набора загружаемых таблиц), отбрасываем индексы/индексирующие ограничения, загружаем данные, затем снова ходим по таблице и воссоздаем индексы/ограничения. Вид уродливый и немного неудобный, но после его запуска он не сломается - и имеет дополнительное преимущество только что построенных индексов (т. Е. Никакой фрагментации и fillfactor не может быть 100). Добавление/изменение/падение индексов также неудобно, но не все так сложно.

Вы можете сделать это динамически - прочитайте и сохраните определения индексов/ограничений из целевой таблицы, отбросьте их, загрузите данные, затем динамически создайте и запустите (повторно) создайте сценарии из ваших сохраненных данных. Но, если что-то падает во время пробега, вы так мертвы. (Вот почему я поселился на постоянных столах.)

Я считаю, что это очень хорошо работает с разбиением таблиц, так как вы выполняете всю работу над таблицами «Загрузка», а таблицы live (dbo, для нас) нетронуты.

Смежные вопросы