В новой версии SQL Server 11 “Denali” создан новый, колоночный тип индекса - COLUMNSTORE
В отличии от обычного индекса для каждой колонки входящей в индекс создается свой набор страниц
Что то мне подсказывает что эта реализация с кучей ограничений (о которых ниже) представляет первый шаг к переходу от традиционных СУБД к колоночным.
По ограничением в чем то схож с HASH индексом:
При выполнении запроса анализируются используемые колонки. Каждая исп. колонка выгружается в оперативную память, сжимается и в последующем обрабатывается в оперативной памяти не используя обращение к диску.
В основе архитектуры лежит ядро VertiPaq. Ядро VertiPaq(VertiPaq Engine) обрабатывает запросы с эффективными алгоритмами сжатия, реализует хранилище данных, позволяющее загружать огромные объемы данных непосредственно в память.
P.S. До 2005 версии MSSQL мог полностью "хранить" таблицу в оперативной памяти
Очень интересная презентация о новых возможностях Денали
Ниже докуммент со сравнением производительности обычного и колоночного индекса
CREATE [[ UNIQUE ] [ CLUSTERED | NONCLUSTERED ]] | [COLUMNSTORE] INDEX index_name
В отличии от обычного индекса для каждой колонки входящей в индекс создается свой набор страниц
Что то мне подсказывает что эта реализация с кучей ограничений (о которых ниже) представляет первый шаг к переходу от традиционных СУБД к колоночным.
По ограничением в чем то схож с HASH индексом:
- Не может быть уникальным;
- Не допускается сортировка;
- В индексе могут присутствовать только простые типы данных (не допускаются: binary, varbinary, text, sql_variant и т.д.)
- Автоматически не обновляется вместе с изменением данных (для актуализации индекса потребуется его удалить и создать заново rebuild не работает)
При выполнении запроса анализируются используемые колонки. Каждая исп. колонка выгружается в оперативную память, сжимается и в последующем обрабатывается в оперативной памяти не используя обращение к диску.
В основе архитектуры лежит ядро VertiPaq. Ядро VertiPaq(VertiPaq Engine) обрабатывает запросы с эффективными алгоритмами сжатия, реализует хранилище данных, позволяющее загружать огромные объемы данных непосредственно в память.
P.S. До 2005 версии MSSQL мог полностью "хранить" таблицу в оперативной памяти
Очень интересная презентация о новых возможностях Денали
Ниже докуммент со сравнением производительности обычного и колоночного индекса