Самый эффективный способ создать индекс Columnstore для большой существующей таблицы?

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

Должен ли я создать пустую реплику таблицы с индексом columnstore и выбрать в нее свои данные, или мне следует удалить все обычные индексы в существующей таблице и добавить непосредственно в нее индекс columnstore?

У меня есть 12 ядер ЦП и 100 ГБ ОЗУ, выделенных для SQL Server 2019. Я сделаю обновление во время периода обслуживания, и для этой задачи будут выделены максимальные ресурсы сервера. Какой метод добавления индекса будет быстрее?


person Geoff Griswald    schedule 26.02.2020    source источник


Ответы (1)


Читая документацию Microsoft, кажется, что я буду делать это третьим способом. Начиная с SQL Server 2016 вам не нужно удалять существующие индексы, и на самом деле они очень полезны для индекса ColumnStore.

Что я сделаю, так это создам индекс Clustered ColumnStore поверх существующих «обычных» индексов RowStore, не удаляя их, и использую параметр DROP EXISTING.

Если этот параметр включен, SQL Server использует существующие индексы RowStore для упорядочения данных в ColumnStore, которые затем ведут себя как обычный индекс. Он даже сохраняет имена индексов и сохраняет все существующие метаданные и статистику. Планы выполнения, в которых использовались существующие индексы, останутся в силе.

Таким образом, мне не нужно жертвовать производительностью поиска одного значения, которую я получаю с моим кластеризованным первичным ключом и моими индивидуальными индексами, которые я настроил для определенных запросов, они просто включаются в ColumnStore и продолжают быть доступными! Фантастический!

person Geoff Griswald    schedule 27.02.2020