Перейти к основному содержимому

Индексы

Индексы помогают быстро находить данные, соответствующие определенным условиям запроса. Конкретно, когда индекс создается для таблицы на основе некоторых столбцов таблицы, запросы, использующие эти столбцы в качестве условий, требуют сканирования только части данных таблицы для поиска данных, соответствующих условиям. Таким образом, повышается эффективность запросов. Selena предоставляет различные типы индексов, которые в основном делятся на следующие две категории:

  • Selena предоставляет встроенные индексы, которые автоматически создаются системой, включая Prefix индексы, Ordinal индексы и ZoneMap индексы.
  • Selena также позволяет пользователям создавать индексы вручную, включая Bitmap индексы и Bloom filter индексы.

Встроенные индексы

Prefix индексы

Prefix индекс автоматически генерируется во время записи данных. Более конкретно, когда данные записываются в Selena, они сортируются согласно указанному ключу сортировки, и каждые 1024 строки данных включаются в один логический блок данных. Запись индекса, состоящая из значений столбцов ключа сортировки первой строки данных в этом логическом блоке, добавляется в таблицу Prefix индекса. Когда условие фильтрации в запросе соответствует префиксу Prefix индекса, Prefix индекс может быстро найти данные, соответствующие условиям, и уменьшить объем сканируемых данных, что может значительно улучшить производительность запросов.

Ordinal индексы

Selena фактически использует колоночное хранение в базовом хранилище. Данные каждого столбца хранятся на страницах данных, и размер каждой страницы данных обычно составляет 64 * 1024 байта (data_page_size = 64 * 1024). Запись Ordinal индекса добавляется одновременно с генерацией страницы данных. Запись Ordinal индекса содержит информацию, такую как начальный номер строки страницы данных. Таким образом, Ordinal индекс может найти физический адрес страницы данных столбца Data Page, используя номер строки.

img

ZoneMap индексы

ZoneMap индекс хранит статистику каждого блока данных, которая включает информацию о Min (максимальное значение), Max (минимальное значение), HasNull (наличие null значений) и HasNotNull (наличие не-null значений). Во время запросов Selena может быстро оценить, можно ли отфильтровать эти блоки данных на основе их статистики, уменьшая объем сканируемых данных и улучшая скорость запросов.

Дополнительная информация

Каждый блок данных может быть сегментом или страницей данных столбца. Соответственно, существует два типа ZoneMap индексов: один хранит статистику для каждого сегмента, а другой для каждой страницы данных столбца.

Индексы, создаваемые вручную

Если столбец в условии запроса не является префиксным полем, вы можете вручную создать индекс для этого столбца на основе характеристик данных и запросов для повышения эффективности запросов.

Bitmap индексы

Bitmap индекс подходит для запросов по столбцам с высокой кардинальностью или комбинациям нескольких столбцов с низкой кардинальностью. Bitmap индекс может демонстрировать идеальную производительность фильтрации для таких запросов, отфильтровывая как минимум 999 из 1000 строк.

Bloom filter индексы

Bloom filter индекс подходит для столбцов с относительно высокой кардинальностью, таких как столбцы ID, но может иметь определенную долю ложных срабатываний.

N-Gram bloom filter индексы

N-gram bloom filter индекс является специальным типом Bloom filter индекса, обычно используемым для ускорения запросов LIKE или операций функций ngram_search и ngram_search_case_insensitive.

Полнотекстовые инвертированные индексы

Полнотекстовый инвертированный индекс может быстро находить строки данных, соответствующие ключевым словам, тем самым ускоряя полнотекстовый поиск.