1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/pingcap-tidb

 / Детали:

Работа вставки и поиска по вторичному индексу происходит следующим образом: Для вставки значения в...

Предстоит сделать
Владелец
Создано  
02.03.2025

таблицу сначала вычисляется значение вторичного индекса. Затем это значение используется для создания записи в индексной структуре данных, такой как дерево B+ или хэш-таблица. Эта запись содержит указатель на место хранения фактического значения в основной таблице. При выполнении запроса поиск начинается с поиска значения вторичного индекса в индексной структуре данных. После того как найдено нужное значение, система использует информацию из индексной структуры данных для быстрого доступа к местоположению фактического значения в основной таблице. Это позволяет значительно ускорять операции чтения и записи в больших базах данных, поскольку они могут использовать вторичные индексы для быстрого поиска информации без необходимости просмотра всех записей в таблице.

Предположим, что есть таблица user, содержащая два столбца: (uid, email), где uid является первичным ключом, а email — вторичным индексом. В таком случае структура данных в виде пар "ключ-значение" будет следующей:

Первичный ключ (uid):

uid -> {uid, email}

Вторичный ключ (email):

email -> uid

Вопрос: При использовании memtable с одним отсортированным по uid баллистическим деревом (skip-list), как осуществляется поиск значения по вторичному ключу email?

Ответ:

Если используется memtable с одним отсортированным по uid баллистическим деревом (skip-list), то для реализации быстрого доступа по вторичному ключу email обычно используются дополнительные структуры данных.

  1. Для каждого вставляемого/обновляемого значения создается запись в первичной структуре данных (баллистическом дереве), отсортированном по uid. Например:

    skip_list = [(uid1, {uid1, email1}), (uid2, {uid2, email2})]
    
  2. Также для каждого значения создается запись во второй структуре данных, отсортированной по email. Например:

    secondary_index = [('email1', uid1), ('email2', uid2)]
    

Когда выполняется запрос типа SELECT * FROM user WHERE email='e1@163.com', процесс происходит следующим образом:

  1. Поиск производится в структуре данных secondary_index.
  2. На основе найденного uid производится поиск в первичной структуре данных (skip_list) для получения полной записи пользователя.

Это позволяет эффективно использовать вторичные индексы для быстрого доступа к данным по различным полям.

Комментарий (0)

GitLife Service Account Задача создана

Вход Перед тем как оставить комментарий

Статус
Ответственный
Контрольная точка
Pull Requests
Связанные запросы на слияние могут быть закрыты после их объединения
Ветки
Дата начала   -   Крайний срок
-
Закрепить/Открепить
Приоритет
Участники(1)
1
https://api.gitlife.ru/oschina-mirror/pingcap-tidb.git
git@api.gitlife.ru:oschina-mirror/pingcap-tidb.git
oschina-mirror
pingcap-tidb
pingcap-tidb