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


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

Относится к:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsWarehouse в Microsoft FabricSQL база данных в Microsoft Fabric

Узнайте, какие функции columnstore доступны на платформах SQL и версиях SQL Server.

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

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

Сведения о доступности компонентов в Управляемом экземпляре SQL Azure с политикой обновления SQL Server см. в столбце соответствующей версии SQL Server.

Функция индекса 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 Azure Synapse Analytics и Хранилище данных в Microsoft Fabric
Выполнение пакетного режима для многопоточных запросов3 Да Да Да Да Да Да Да
Пакетный режим выполнения для однопоточных запросов Да Да Да Да Да Да Да
Опция сжатия архивации Да Да Да Да Да Да Да
Изоляция моментальных снимков и изоляция с фиксированным чтением моментальных снимков. Да Да Да Да Да Да Да
Указать индекс columnstore при создании таблицы Да Да Да Да Да Да Да
Always On поддерживает колонночные индексы Да Да Да Да Да Да Да
Читаемая вторичная реплика Always On поддерживает некластеризованные столбчатые индексы только для чтения. Да Да Да Да Да Да Да
Вторичная читаемая реплика Always On поддерживает обновляемые индексы columnstore Да Да Да Да Да нет нет
Некластеризованный индекс columnstore только для чтения в heap или B-дереве Да4 Да4 Да4 Да4 Да4 Да4 Да4
Обновляемый некластеризованный столбчатый индекс в куче или в B-дереве Да Да Да Да Да Да Да
Дополнительные индексы B-дерева разрешены в куче или B-дереве, которое имеет некластеризованный индекс столбцового хранилища. Да Да Да Да Да Да Да
Обновляемый кластеризованный колонночный индекс Да Да Да Да Да Да Да
Индекс B-дерева в кластеризованном хранилище столбцов Да Да Да Да Да Да Да
Индекс columnstore в таблице, оптимизированной для памяти Да Да Да Да Да Да Да
Определение некластеризованного индекса columnstore поддерживает использование отфильтрованных условий Да Да Да Да Да Да Да
Опция задержки сжатия для колоночных индексов в CREATE TABLE и ALTER TABLE Да Да Да Да Да Да Да
Поддержка типа nvarchar(max) нет Да Да Да Да Да Нет5
Индекс columnstore может содержать нематериализованный вычисляемый столбец нет Да Да Да Да нет нет
Поддержка перемещения кортежей с слиянием в фоновом режиме нет нет Да Да Да Да Да
Упорядоченные кластерные columnstore-индексы нет нет нет Да Да Да Да
Упорядоченные индексы колонночного хранилища данных без кластеров нет нет нет нет Да Да нет
Создание и перестроение индекса columnstore в Интернете нет нет нет Да Да Да нет
Создание и перестроение индексированного columnstore в режиме онлайн нет нет нет нет Да Да нет

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. Ранее создание индекса columnstore допускалось только в таблицах на дисках.

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

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

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

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

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

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

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

  • Агрегатная отправка вычисляет агрегатные функции MIN, MAX, SUMCOUNTи 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 % больше по сравнению со строковым хранилищем, поскольку он хранит копию данных.
  • Пакетная обработка обеспечивает 2x или более высокую производительность запросов, но она доступна только для параллельного выполнения запросов.