Яка анатомія індексу магазину стовпців?


20

Однією з нових функцій у кодовому назві SQL Server 2012 Denaliє індекс Columnstore.

Я добре знаю про звичайні старі індекси магазину рядків, як-от структура b-дерева, відмінності в сховищі між рівнем листів та сторінок b-дерева, афекти включених полів, оптимізація їх використання, порядок клавіш тощо.

У мене виникають труднощі з отриманням будь-якої корисної інформації про внутрішні записи індексу стовпців.

  • Як вона структурована?
  • Чи є b-дерево? Якась інша структура на місці?
  • Як організовані дані?
  • Які типи конкретних операторів найкраще підходять для його використання?
  • Яких-небудь інших шаблонів, яких слід уникати при їх використанні?

Багато з того, що я можу дізнатися про них, - це, як правило, протилежна "нормальному" індексу, тобто відсутність впорядкування ключів, відсутні включені поля, некластеризовані ТОЛЬКО.

Будь-яка думка цінується.


Існує досить багато прихильників щодо технічних реалізацій баз даних стовпців на сторінці Вікіпедії. Я думаю, що індекс - це лише структура даних для зберігання стовпців для одного стовпця разом з його ключами. Можливо, він використовує растровий індекс, можливо BTree.
Занепокоєний

Це насправді для кількох стовпців. Також я припускаю, що і в інших реалізаціях SS це буде дещо інше, ніж інші продукти
JNK

Для MySQL, але це стосується: developer.bazaarvoice.com/why-column-are-cool Також Sybase IQ - це великий тато
gbn

3
@ConcernedOfTunbridgeWells - Чи використовують індекси стовпців магазину растрові індекси? Ні. Індекси Columnstore використовують власне представлення даних на основі Vertipaq. Це не те саме, що індекс растрових зображень і не використовує. Але це має деякі подібні переваги до індексів растрових зображень, наприклад, скорочення часу, необхідного для фільтрації на стовпчику з невеликою кількістю чітких значень.
Мартін Сміт

1
Ремус Русану, член команди Microsoft, яка розробила цю функцію, щойно опублікувала фрагмент про це: Всередині індексів COLUMNSTORE SQL Server 2012
Nick Chammas

Відповіді:


22

Структура стовпців

Дані стовпчиків фізично зберігаються в одному або декількох сегментах (звичайні одиниці розподілу LOB) на стовпчик, а також можуть бути розділені звичайним чином. Кожен сегмент містить приблизно один мільйон рядків сильно стислих значень або значень значень (доступно декілька методів стиснення). Посилання на значення посилається на запис в одному з до двох хеш-словників .

Словники закріплюються в пам'яті під час виконання запиту, ідентифікатори значень даних із сегмента шукаються у словнику щоразу, коли для виконання потрібне фактичне значення даних (цей пошук відкладається на якомога довше з міркувань продуктивності).

Сегменти також мають запис заголовка, що містить метадані, такі як мінімальні та максимальні значення, що зберігаються в сегменті. Інформація із заголовка часто може використовуватися для усунення повних розділів від обробки під час виконання. Інформація запису заголовка зберігається у звичайній кореневій структурі даних LOB, тому усунення сегменту означає, що механізм зберігання даних може повністю пропустити читання сторінок даних LOB з фізичного зберігання. Максимізація потенціалу для усунення може вимагати ретельної розробки , включаючи залежність від кластерного порядку індексу під час побудови індексу Columnstore.

Конкретні оператори плану

SQL Server 2012 вводить новий режим виконання, який називається Пакетний режим. У цьому режимі пакети розміром приблизно 1000 рядків передаються між операторами, що значно покращує ефективність використання процесора. У кожному пакеті стовпчикові дані представлені у вигляді вектора. Не всі оператори плану підтримують операцію пакетного режиму, але приклади тих, що включають: Сканування індексів стовпців, Hash Inner Join, Створення збірки таблиць хеш-файлів, Фільтр бітових карт, Hash Aggregate (не скалярних агрегатів), Фільтр та Обчислення скаляр (для прогнозування та вираження оцінка). Плани виконання запитів були покращені для відображення прогнозованого та фактичного режиму виконання.

Анти-візерунки

У першому випуску існує велика кількість обмежень, включаючи обмеження щодо допустимих типів даних . Підтримуються найбільш поширені типи; підтримуються типи даних включають в себе DECIMALз точністю вище , ніж 18 цифр, (N)VARCHAR(MAX), UNIQUEIDENTIFIER, типи CLR, і (VAR)BINARY.

Використання строкових типів , OUTER JOIN, IN,EXISTS , NOT IN, OR, UNION ALLможе привести до значного зниження продуктивності (Ряд виконання режиму), якщо обхідні не використовується , що , як правило , включають незвичайні синтаксичні перезапису , як показано в пов'язаних статтях в даному розділі.

Більше інформації

Ремус Ruşanu має в блозі відмінний огляд тут .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.