СУБД: SQL Server 2005 Standard Edition
У меня есть таблица с 1 миллиардом строк.
Что я хотел бы сделать, так это разделить его по вертикали с помощью функции разделения и применить схему разделения с функцией в таблице, скажем BigTable
с участием ID
столбец как имя столбца первичного ключа.
Предположим, у меня есть 2 группы файлов,
BigTable
хранится здесьИ FG1 содержит значение ID от 1 до 5 миллионов. И FG2 содержит значение ID от 5 миллионов + 1 и так далее.
Если бы я перестроил индекс на BigTable
, когда SQL Server перестроит индексы для индексов для ID от 1 до 5 миллионов, повлияет ли это на пользователей, которые обращаются к BigTable
где ID больше 5 млн + 1?
Если бы вам пришлось перестроить весь index на BigTable с использованием перестроения OFFLINE (по умолчанию), вся таблица будет отключена для запроса на время перестройки. У вас также есть возможность перестроить весь индекс с использованием ОНЛАЙН восстановление, что обеспечит возможность запроса всей таблицы (как для чтения, так и для записи) в течение почти всего периода (есть 2 относительно короткие фазы в начале и в конце операции, которые не полностью выполняются) перестройки (с некоторыми другими возможные побочные эффекты, такие как использование большего дискового пространства, увеличение времени и т. д.). Для получения дополнительных сведений об операциях с индексами в Интернете см. как они работают и рекомендации по их выполнению.
Если вы хотите перестроить только один раздел BigTable, у вас есть очень похожие параметры, как и для всей таблицы, однако влияние параллелизма ограничивается перестраиваемым разделом. Существуют ограничения на перестройку одного раздела, например тот факт, что вы не можете выполнить перестройку одного раздела ОНЛАЙН (т.е. если вы решите перестроить один раздел, вы должны сделать это ОФФЛАЙН, что означает, что данные для данного раздела будут быть недоступным на время восстановления). Для получения дополнительной информации о параметрах см. Параметры одного раздела в разделе Документация оператора ALTER INDEX.
Что касается конкретного ответа, когда / как движок Sql определяет, какие части данного индекса (секционированные или нет) должны быть перестроены / доступны во время операции перестроения, это действительно не имеет значения - варианты, которые у вас есть с точки зрения параллелизма:
Если вы укажете весь индекс / все разделы, вы получите семантику параллелизма, описанную в первом абзаце выше. Если вы укажете один раздел, семантика параллелизма будет такой, как указано во втором абзаце.