Индексы
Установка некоторых типов ограничений (прежде всего, ограничения 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 может использоваться только для индексов, реализованных в виде В-дерева.