Какое определение вторичного индекса в postgresql? - PullRequest
0 голосов
/ 28 июня 2018

С https://www.postgresql.org/docs/9.6/static/indexes-index-only-scans.html:

Все индексы в PostgreSQL являются вторичными индексами, означает, что каждый индекс хранится отдельно от основной области данных таблицы (которая в терминологии PostgreSQL называется кучей таблицы).

В postgresql вторичный индекс определяется как индекс, который хранится отдельно от основной области данных таблицы?

Если нет, каково его определение и почему в цитате упоминается то, которое не является определением?

Аналогично, каково определение первичного индекса?

Являются ли понятия в postgresql такими же, как в База данных Oracle ?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

В определениях первичных и вторичных индексов отсутствует определенная точность.

Использование двух популярных университетских текстов для справки:

Основы систем баз данных, Elmasri & Navathe определяет их как:

Первичный индекс в качестве индекса для упорядоченного файла, где ключ поиска совпадает с ключом сортировки

Вторичный индекс предоставляет вторичные средства доступа к файлу данных, для которого уже существует некоторый первичный доступ. Записи файла данных могут быть упорядочены, неупорядочены или хэшированы.

Системы баз данных: полная книга, Garcia-Molina et. al определяет их как:

Первичный индекс определяет местоположение записей файла данных

Вторичный индекс отличается от первичного индекса тем, что вторичный индекс не определяет размещение записей в файле данных. Скорее вторичный индекс сообщает нам текущее местоположение записей; это местоположение может быть определено первичным индексом в каком-либо другом поле

Некоторые свойства, которые справедливы для любого из приведенных выше определений:

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

Однако, если размещение записей в файле данных не определяется каким-либо полем, тогда нельзя создать первичный индекс.

Таким образом, для отсортированных файлов имеет смысл поговорить о первичном индексе (который будет списком полей, на которых основана сортировка). Я не могу найти другие примеры физических файловых структур, в которых можно построить первичный индекс.

Postgresql использует структуру кучи для физического хранения записей. Кучи не сортируются (каламбур: они сортируются). Поэтому даже первичные ключи реализованы с использованием вторичных индексов, и поэтому все индексы в Postgresql являются вторичными.

Другие системы RDBMS do реализуют форматы хранения, поддерживающие первичные индексы:


Язык в документации Postgres неточный.

Все индексы в PostgreSQL являются вторичными индексами

Это правда.

означает, что каждый индекс хранится отдельно от основной области данных таблицы

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

0 голосов
/ 28 июня 2018

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...