Иллюстрированный самоучитель по PostgreSQL

Индексы

Установка некоторых типов ограничений (прежде всего, ограничения PRIMARY KEY и UNIQUE) также приводит к автоматическому построению индекса. В листинге 7.2 при создании таблицы authors для поля id устанавливается ограничение первичного ключа (PRIMARY KEY). В результате автоматически строится индекс authors_pkey.

Листинг 7.2. Автоматическое построение индекса.

booktown=# CREATE TABLE authors (id integer PRIMARY KEY,
booktown(# last_name text,
booktown(# first_name text);
NOTICE: CREATE TABtE/PRIMARY KEY will create implicit index 'authors_pkey' for
table 'authors'
CREATE
example=# \d authors
Table "authors"
Attribute | Type Modifier
id integer | not null
lastjiame | text
firstjiame text |
Index: authors_pkey

Индекс, построенный командой из листинга 7.2, позволяет PostgreSQL быстро проверять уникальность первичного ключа для всех новых записей, заносимых в таблицу. Кроме того, индекс повышает скорость выполнения запросов, у которых поле id указано в условии поиска.

Уникальные индексы

Создание индекса с ключевым словом UNIQUE говорит о том, что индекс является уникальным, то есть индексируемое поле (или поля) не может содержать повторяющихся значений. Фактически создание уникального индекса эквивалентно созданию таблицы с ограничением уникальности (см. ниже подраздел "Ограничения в таблицах" в разделе "Нетривиальное использование таблиц").

В листинге 7.3 для поля name таблицы publishers создается уникальный индекс unique_publisheMdx. Это означает, что в таблице не могут присутствовать два издательства с одинаковыми названиями.

Листинг 7.3. Создание уникального индекса.

booktown-* CREATE UNIQUE INDEX unique_publisher_idx
booktown-# ON publishers (name):
CREATE
booktown=# \d publishers
Table "publishers" Attribute | Type | Modifier
id integer | not null
name | text
address j text j Indices: publishers_pkey.
urn que_publ i sher_i dx

Поскольку псевдозначение NULL формально не совпадает ни с одним реальным значением, в поле с уникальным индексом допускаются многократные вхождения NULL. В этом и заключается главное практическое различие между уникальным индексом и индексом, автоматически создаваемым при установке ограничения PRIMARY KEY, которое вообще запрещает присутствие значений NULL.

Внимание
Ключевое слово UNIQUE в сочетании с секцией USING может использоваться только для индексов, реализованных в виде В-дерева
.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.