[Википедия](https://ru.wikipedia.org/wiki/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D1%8B%D0%B9_%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81#:~:text=%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D1%8B%D0%B9%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%20(%D0%B0%D0%BD%D0%B3%D0%BB.,%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D1%8C%20%D0%B2%20%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%BC%20%D1%84%D0%B0%D0%B9%D0%BB%D0%B5%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85.)

Что такое плотный индекс (Dense Index)?

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

Характеристики плотного индекса:

  • Однозначное отображение: Каждая запись в базе данных имеет запись в индексе.
  • Быстрые поиски: Поскольку для каждой записи есть запись в индексе, поиски обычно быстрее, чем для разреженных индексов (но за счет большего объема памяти).
  • Высокие требования к хранению: Поскольку каждая строка индексируется, плотные индексы требуют больше места для хранения по сравнению с разреженными индексами.
  • Эффективен для маленьких таблиц: Хорошо работает для небольших наборов данных, но может быть неэффективен для очень больших таблиц.

Плотный индекс vs. Разреженный индекс

ХарактеристикаПлотный индексРазреженный индекс
Размер храненияБольше (сохраняет запись для каждой записи)Меньше (сохраняет меньше записей, обычно для каждого блока или страницы)
Скорость поискаБыстрее (прямой доступ к любой записи)Медленнее (необходим дополнительный поиск внутри блока/страницы)
Стоимость обновленийВыше (каждое вставление/обновление затрагивает индекс)Ниже (нужно обновить меньше записей индекса)
Лучший случай использованияМалые и средние таблицыБольшие наборы данных с упорядоченными ключами

Визуальный пример плотного индекса

Рассмотрим простую таблицу:

IDИмяВозраст
1Alice28
2Bob32
3Charlie25
4David40

Плотный индекс для столбца ID будет выглядеть так:

Индекс (ID)Указатель на запись
1→ Запись Alice
2→ Запись Bob
3→ Запись Charlie
4→ Запись David

В то время как разреженный индекс может хранить только выбранные записи, например:

Индекс (ID)Указатель на запись
1→ Запись Alice
3→ Запись Charlie

Разреженный индекс потребует дополнительного шага для поиска Bob и David, так как нужно будет выполнить поиск внутри индексированных блоков.