Поделиться через


Что нового в колонно-ориентированных индексах

Относится к:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsСистема аналитической платформы (PDW)SQL база данных в Microsoft Fabric

Узнайте, какие функции columnstore доступны для каждой версии SQL Server, а также последние версии Azure SQL Database, Azure Synapse Analytics и Analytics Platform System (PDW).

Сводка функций для релизов продукта

В следующей таблице перечислены основные функции для индексов columnstore и продукты, в которых они доступны.

Функция индекса Columnstore SQL Server 2016 (13.x)1 SQL Server 2017 (14.x) SQL Server 2019 (15.x) SQL Server 2022 (16.x) SQL Server 2025 (17.x) База данных Azure SQL2 и Управляемый экземпляр Azure SQLAUTD Выделенный пул SQL для Azure Synapse Analytics
Выполнение пакетного режима для многопоточных запросов3 yes yes yes yes yes yes yes
Пакетный режим выполнения для однопоточных запросов yes yes yes yes yes yes yes
Опция сжатия архивации yes yes yes yes yes yes yes
Изоляция моментальных снимков и изоляция с фиксированным чтением моментальных снимков. yes yes yes yes yes yes yes
Указать индекс columnstore при создании таблицы yes yes yes yes yes yes yes
Always On поддерживает колонночные индексы yes yes yes yes yes yes yes
Читаемая вторичная реплика Always On поддерживает некластеризованные столбчатые индексы только для чтения. yes yes yes yes yes yes yes
Вторичная читаемая реплика Always On поддерживает обновляемые индексы columnstore yes yes yes yes yes
Некластеризованный индекс columnstore только для чтения в heap или B-дереве Да 4 Да 4 Да 4 Да 4 Да 4 Да 4 Да 4
Обновляемый некластеризованный столбчатый индекс в куче или в B-дереве yes yes yes yes yes yes yes
Дополнительные индексы B-дерева разрешены в куче или B-дереве, которое имеет некластеризованный индекс столбцового хранилища. yes yes yes yes yes yes yes
Обновляемый кластеризованный колонночный индекс yes yes yes yes yes yes yes
Индекс B-дерева в кластеризованном хранилище столбцов yes yes yes yes yes yes yes
Индекс columnstore в таблице, оптимизированной для памяти yes yes yes yes yes yes yes
Определение некластеризованного индекса columnstore поддерживает использование отфильтрованных условий yes yes yes yes yes yes yes
Опция задержки сжатия для колоночных индексов в CREATE TABLE и ALTER TABLE yes yes yes yes yes yes yes
Поддержка типа nvarchar(max) yes yes yes yes yes нет 5
Индекс columnstore может содержать нематериализованный вычисляемый столбец yes yes yes yes
Поддержка перемещения кортежей с слиянием в фоновом режиме yes yes yes yes yes
Упорядоченные кластерные columnstore-индексы yes yes yes yes
Упорядоченные индексы колонночного хранилища данных без кластеров yes yes
Создание и перестроение индекса columnstore в Интернете yes yes yes
Создание и перестроение индексированного columnstore в режиме онлайн yes yes

1 Для SQL Server 2016 (13.x) с пакетом обновления 1 (SP1) и более поздних версий индексы columnstore доступны во всех выпусках. Для SQL Server 2016 (13.x) (до sp1) и более ранних версий индексы columnstore доступны только в Выпуске Enterprise.
2 В SQL Azure индексы columnstore доступны на уровнях DTU Premium, DTU Standard — S3 и выше, а также на всех уровнях виртуальных ядер.
3 Степень параллелизма (DOP) для пакетного режима операций ограничена 2 для SQL Server Standard Edition и 1 для SQL Server Web и Express Editions. Это ограничение относится к индексам columnstore, созданным на основе дисковых таблиц и оптимизированных для памяти таблиц.
4 Чтобы создать некластеризованный columnstore индекс только для чтения, разместите индекс в файловой группе, доступной только для чтения.
5 не поддерживается в выделенных пулах SQL, но поддерживается в бессерверном пуле SQL.

SQL Server 2025 (17.x)

В SQL Server 2025 (17.x) добавлены следующие функции:

  • Упорядоченные некластеризованные columnstore повышают производительность запросов в оперативной аналитике в режиме реального времени.

    Дополнительные сведения см. в разделе Настройка производительности с упорядоченными индексами columnstore.

  • Теперь можно в режиме онлайн создать или перестроить упорядоченный индекс columnstore (кластеризованный или некластеризованный).

    Можно указать ONLINE = ON в инструкции CREATE INDEX, когда присутствует ORDER. Дополнительные сведения об операциях с индексами в сети см. в разделе "Выполнение операций индекса в сети".

  • Улучшено качество сортировки для упорядоченных кластеризованных колонковых индексов.

    В SQL Server 2025 (17.x) при создании упорядоченного кластеризованного columnstore индекса в режиме онлайн, алгоритм сортировки данных использует tempdb вместо сортировки данных в памяти. Если MAXDOP для сборки индекса задано значение 1, сборка создает полностью упорядоченный кластеризованный индекс columnstore, который не имеет перекрывающихся сегментов.

    Это может повысить производительность запросов с помощью индекса. Однако сборка индекса может занять больше времени из-за дополнительных операций ввода-вывода, необходимых для переполнения tempdb.

    Если кластеризованный индекс columnstore уже существует, запросы могут продолжать использовать его, пока выполняется полностью упорядоченное перестроение индекса в сети.

  • Улучшены операции сжатия базы данных и файлов.

    В предыдущих версиях SQL Server, когда кластеризованный индекс columnstore содержит любые столбцы с типами данных LOB, такими как varchar(max),nvarchar(max), varbinary(max), страницы данных, используемые этими столбцами, не могут быть перемещены операциями сжатия. В результате сжатие может оказаться менее эффективным при освобождении пространства в файлах данных.

    В SQL Server 2025 (17.x) команды DBCC SHRINKDATABASE и DBCC SHRINKFILE могут перемещать страницы данных, используемые LOB-столбцами в индексах columnstore.

SQL Server 2022 (16.x)

В SQL Server 2022 (16.x) добавлены следующие функции:

  • Упорядоченные кластеризованные индексы columnstore повышают производительность запросов на основе упорядоченных предикатов столбцов. Упорядоченные индексы columnstore могут повысить производительность, пропуская сегменты данных в целом. Это может значительно сократить объем операций ввода-вывода, необходимых для выполнения запросов к данным columnstore. Дополнительные сведения см. в разделе удаление сегмента. Дополнительные сведения см. в разделах CREATE COLUMNSTORE INDEX и Настройка производительности с упорядоченными columnstore индексами.
  • Предикат pushdown с кластеризованной группой строк columnstore для устранения строк использует значения границ для оптимизации поиска строк. Все индексы columnstore получают преимущество от расширенного исключения сегментов по типу данных. Начиная с SQL Server 2022 (16.x), эти возможности устранения сегментов расширяются до типов данных string, binary и GUID, а datetimeoffset для масштабирования больше двух. Ранее исключение сегмента columnstore применялось только к числовым, датовым и временным типам данных, а также к типу данных datetimeoffset с масштабом меньше или равно двум. После обновления до версии SQL Server, которая поддерживает исключение сегмента строки min/max (SQL Server 2022 (16.x) и более поздние версии), columnstore-индекс не будет использовать эту функцию, пока он не будет перестроен с помощью ALTER INDEX REBUILD или CREATE INDEX WITH (DROP_EXISTING = ON).
  • Исключение групп строк в columnstore для префикса предикатов LIKE (например, column LIKE 'string%'). Исключение сегментов не поддерживается для использования, не являющегося префиксом, LIKE, например, column LIKE '%string'.
  • Дополнительные сведения о добавленных функциях см. в статье "Новые возможности SQL Server 2022".

SQL Server 2019 (15.x)

SQL Server 2019 (15.x) добавляет следующие новые возможности:

Functional

Начиная с SQL Server 2019 (15.x), модулю перемещения кортежей помогает фоновая задача слияния, которая автоматически сжимает небольшие ОТКРЫТЫЕ дельта-группы строк, которые существуют уже некоторое время в соответствии с внутренним порогом, или объединяет СЖАТЫЕ группы строк, из которых было удалено большое количество строк. Ранее операция реорганизации индекса требовалась для объединения групп строк с частично удаленными данными. Это со временем повышает качество индекса columnstore.

SQL Server 2017 (14.x)

SQL Server 2017 (14.x) добавляет эти новые функции.

Functional

  • SQL Server 2017 (14.x) поддерживает неперсистированные вычисляемые столбцы в кластеризованных индексах columnstore. В кластеризованных индексах columnstore не поддерживаются материализованные вычисляемые столбцы. Невозможно создать некластеризованный индекс columnstore в вычисляемом столбце.

SQL Server 2016 (13.x)

SQL Server 2016 (13.x) добавляет ключевые улучшения для повышения производительности и гибкости индексов columnstore. Эти улучшения расширяют возможности хранения данных и обеспечивают поддержку операционной аналитики в реальном времени.

Functional

  • В таблице типа rowstore может быть один обновляемый некластеризованный индекс типа columnstore. Ранее некластеризованный индекс columnstore был доступен только для чтения.

  • Определение некластеризованного индекса columnstore поддерживает использование отфильтрованных условий. Чтобы свести к минимуму негативное влияние на производительность, вызванное добавлением некластеризованного индекса columnstore для таблицы OLTP, можно использовать отфильтрованное условие для создания некластеризованного индекса columnstore только для холодных данных операционной рабочей нагрузки.

  • Таблица, хранящаяся в оперативной памяти, может иметь один колоночный индекс. Вы можете создать его одновременно с созданием таблицы или добавить позже с помощью ALTER TABLE (Transact-SQL). Ранее создание индекса columnstore допускалось только в таблицах на дисках.

  • Кластеризованный индекс columnstore может включать один или несколько некластеризованных индексов rowstore. Ранее индекс columnstore не поддерживал некластеризованные индексы. SQL Server автоматически обслуживает некластеризованные индексы для операций DML.

  • Поддержка первичных и внешних ключей с использованием индекса B-tree для соблюдения этих ограничений на кластеризованный columnstore index.

  • Индексы columnstore включают параметр задержки сжатия, который сводит к минимуму влияние транзакционной рабочей нагрузки на операционную аналитику в реальном времени. Этот параметр позволяет стабилизировать часто изменяющиеся строки, прежде чем сжать их в колонночное хранилище. Дополнительные сведения см. в статье CREATE COLUMNSTORE INDEX (Transact-SQL) и Начало работы с Columnstore для оперативной аналитики в режиме реального времени.

Производительность для уровня совместимости базы данных 120 или 130

  • Индексы columnstore поддерживают уровень изоляции моментальных снимков read committed (RCSI) и изоляцию моментальных снимков (SI). Это позволяет выполнять транзакционно согласованные аналитические запросы без блокировок.

  • Columnstore поддерживает дефрагментацию индексов с помощью удаления строк без необходимости явного перестроения индекса. Инструкция ALTER INDEX ... REORGANIZE удаляет удаленные строки (на основе внутренней политики) из индекса columnstore в оперативном режиме.

  • К индексам columnstore можно получить доступ на читаемой вторичной реплике Always On. За счет переноса запросов аналитики во вторичную реплику AlwaysOn можно повысить производительность оперативной аналитики.

  • Аггрегированное вычисление (Aggregate Pushdown) вычисляет агрегатные функции MIN, MAX, SUM, COUNT и AVG во время сканирования таблицы, если тип данных использует не более 8 байт и не относится к строковому типу данных. Понижение агрегатов поддерживается с включением или без включения предложения GROUP BY как для кластеризованных столбцовых индексов, так и для некластеризованных столбцовых индексов. В SQL Server это улучшение зарезервировано для выпуска Enterprise.

  • Продвижение строкового предиката ускоряет запросы, которые сравнивают строки типа VARCHAR/CHAR или NVARCHAR/NCHAR. Это относится к общим операторам сравнения, включая такие операторы, как LIKE, которые используют фильтры битовой карты. Это работает со всеми поддерживаемыми параметрами сортировки. В SQL Server это улучшение зарезервировано для выпуска Enterprise.

  • Улучшения для операций в пакетном режиме за счет использования векторных аппаратных возможностей. Ядро СУБД обнаруживает уровень поддержки процессора для расширений AVX 2 (расширенные векторные расширения) и SSE 4 (потоковые расширения SIMD) и использует их, если они поддерживаются. В SQL Server это улучшение зарезервировано для выпуска Enterprise.

Производительность для уровня совместимости базы данных 130

  • Поддержка нового пакетного режима для запросов с помощью любой из следующих операций:

    • SORT
    • агрегаты с несколькими четко различимыми функциями некоторые примеры: COUNT/COUNT, AVG/SUM, CHECKSUM_AGG, STDEV/STDEVP;
    • агрегатные оконные функции: COUNT, COUNT_BIG, SUM, AVG, MIN, MAX и CLR;
    • определяемые пользователем оконные агрегаты: CHECKSUM_AGG, STDEV, STDEVP, VAR, VARP и GROUPING;
    • аналитические агрегатные оконные функции: LAG, LEAD, FIRST_VALUE, LAST_VALUE, PERCENTILE_CONT, PERCENTILE_DISC, CUME_DIST и PERCENT_RANK.
  • Однопоточные запросы, выполняемые под MAXDOP 1 или с последовательным планом запроса, выполняются в пакетном режиме. Ранее только многопоточные запросы выполнялись в пакетном режиме.

  • Запросы к таблицам, оптимизированным для памяти, могут иметь параллельные планы в режиме SQL InterOp как при доступе к данным в строчном хранилище, так и в колоночном индексе.

Supportability

Следующие системные представления являются новыми для columnstore:

Следующие представления динамического управления (DMV), основанные на технологии OLTP в памяти, содержат обновления для колоночного хранилища:

Limitations

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

Известные проблемы

Применимо к: SQL Server 2022 (16.x) и более ранние версии, Управляемый экземпляр SQL Azure2022

  • Страницы данных, используемые столбцами LOB (varbinary(max), varchar(max), и nvarchar(max)) в сегментах columnstore сжатого типа, не могут быть перемещены с помощью DBCC SHRINKDATABASE и DBCC SHRINKFILE. Эта проблема устранена в SQL Server 2025 (17.x).

SQL Server 2014 (12.x)

SQL Server 2014 (12.x) представил кластеризованный индекс columnstore в качестве основного формата хранилища. Это позволило выполнять регулярные операции загрузки, а также операции обновления, удаления и вставки.

  • Таблица может использовать кластеризованный индекс columnstore в качестве основного хранилища таблиц. В таблице не разрешены другие индексы, но кластеризованный индекс columnstore можно обновить, чтобы вы могли выполнять регулярные нагрузки и вносить изменения в отдельные строки.
  • Некластеризованный индекс columnstore продолжает иметь те же функции, что и в SQL Server 2012 (11.x), за исключением дополнительных операторов, которые теперь могут выполняться в пакетном режиме. Он по-прежнему не может быть обновляемым, за исключением перестроения и переключения разделов. Некластеризованный индекс columnstore поддерживается только в таблицах на диске, но не в таблицах в памяти.
  • Кластеризованный и некластеризованный индексы колоночного хранилища данных имеют опцию архивного сжатия, которое дополнительно сжимает данные. Параметр архивации удобен для сокращения объема данных в памяти и на диске, однако он снижает производительность запросов. Его можно рекомендовать для редко используемых данных.
  • Кластеризованный и некластеризованный индексы columnstore функционируют весьма сходным образом; они используют одинаковый формат хранения по столбцам, подсистему обработки запросов и набор динамических административных представлений. Различие заключается в типе индекса (основной и дополнительный), кроме того, некластеризованный индекс columnstore доступен только для чтения.
  • Следующие операторы выполняются в пакетном режиме для многопоточных запросов: SCAN, FILTER, PROJECT, JOIN, GROUP BY и UNION ALL.

SQL Server 2012 (11.x)

SQL Server 2012 (11.x) представил некластеризованный индекс columnstore в качестве другого типа индекса для таблиц rowstore и пакетной обработки запросов к данным columnstore.

  • Таблица типа rowstore может иметь один некластеризованный индекс columnstore.
  • Индекс columnstore доступен только для чтения. После создания индекса columnstore нельзя обновлять таблицу с помощью операций INSERT, DELETE и UPDATE. Для выполнения этих операций необходимо удалить индекс, обновить таблицу и перестроить индекс columnstore. Дополнительные данные в таблицу можно загрузить с помощью переключения секций. Преимущество переключения разделов заключается в том, что вы можете загружать данные без удаления и перестроения индекса columnstore.
  • Индекс columnstore всегда требует дополнительного места для хранения, как правило, на 10 % больше по сравнению со строковым хранилищем, поскольку он хранит копию данных.
  • Пакетная обработка обеспечивает двукратное (и более) повышение производительности, но она доступна только для параллельного выполнения запросов.