PostgreSQL - ИНДЕКСЫ

Индексы - это специальные таблицы поиска, которые поисковая машина по базам данных может использовать для ускорения поиска данных. Проще говоря, индекс - это указатель на данные в таблице. Указатель в базе данных очень похож на указатель в конце книги.

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

Индекс помогает ускорить запросы SELECT и предложения WHERE; однако он замедляет ввод данных с помощью операторов UPDATE и INSERT. Индексы можно создавать или удалять, не влияя на данные.

Создание индекса включает в себя оператор CREATE INDEX, который позволяет вам назвать индекс, указать таблицу и столбец или столбцы для индексации, а также указать, находится ли индекс в порядке возрастания или убывания.

Индексы также могут быть уникальными, подобно ограничению UNIQUE, поскольку индекс предотвращает дублирование записей в столбце или комбинации столбцов, в которых есть индекс.

Команда CREATE INDEX

Базовый синтаксис CREATE INDEX выглядит следующим образом -

CREATE INDEX index_name ON table_name;

Типы индексов

PostgreSQL предоставляет несколько типов индексов: B-tree, Hash, GiST, SP-GiST и GIN. Каждый тип индекса использует свой алгоритм, который лучше всего подходит для разных типов запросов. По умолчанию команда CREATE INDEX создает индексы в виде B-дерева, которые подходят для наиболее распространенных ситуаций.

Одностолбцовые индексы

Индекс с одним столбцом - это индекс, который создается на основе только одного столбца таблицы. Основной синтаксис следующий -

CREATE INDEX index_name
ON table_name (column_name);

Многоколоночные индексы

Многоколоночный индекс определяется более чем в одном столбце таблицы. Основной синтаксис следующий -

CREATE INDEX index_name
ON table_name (column1_name, column2_name);

Независимо от того, создавать ли индекс с одним столбцом или индекс с несколькими столбцами, примите во внимание столбцы, которые вы можете очень часто использовать в предложении WHERE запроса в качестве условий фильтрации.

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

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

Уникальные индексы используются не только для производительности, но и для целостности данных. Уникальный индекс не позволяет вставлять в таблицу повторяющиеся значения. Основной синтаксис следующий -

CREATE UNIQUE INDEX index_name
on table_name (column_name);

Частичные индексы

Частичный индекс - это индекс, построенный по подмножеству таблицы; подмножество определяется условным выражением (называемым предикатом частичного индекса). Индекс содержит записи только для тех строк таблицы, которые удовлетворяют предикату. Основной синтаксис следующий -

CREATE INDEX index_name
on table_name (conditional_expression);

Неявные индексы

Неявные индексы - это индексы, которые автоматически создаются сервером базы данных при создании объекта. Индексы автоматически создаются для ограничений первичного ключа и уникальных ограничений.

пример

Ниже приведен пример, в котором мы создадим индекс в таблице КОМПАНИИ для столбца зарплаты.

# CREATE INDEX salary_index ON COMPANY (salary);

Теперь давайте перечислим все индексы, доступные в таблице COMPANY, используя \d company команда.

# \d company

Это приведет к следующему результату, где company_pkey - это неявный индекс, который был создан при создании таблицы.

Table "public.company"
 Column  |     Type      | Modifiers
---------+---------------+-----------
 id      | integer       | not null
 name    | text          | not null
 age     | integer       | not null
 address | character(50) |
 salary  | real          |
Indexes:
    "company_pkey" PRIMARY KEY, btree (id)
    "salary_index" btree (salary)

Вы можете перечислить всю базу данных индексов, используя \di команда -

Команда DROP INDEX

Индекс можно удалить с помощью PostgreSQL DROPкоманда. Следует соблюдать осторожность при удалении индекса, поскольку производительность может снизиться или повыситься.

Основной синтаксис следующий -

DROP INDEX index_name;

Вы можете использовать следующий оператор для удаления ранее созданного индекса -

# DROP INDEX salary_index;

Когда следует избегать индексов?

Хотя индексы предназначены для повышения производительности базы данных, бывают случаи, когда их следует избегать. Следующие рекомендации указывают, когда следует пересмотреть использование индекса:

  • Индексы не следует использовать для небольших таблиц.

  • Таблицы, для которых выполняются частые, большие пакетные операции обновления или вставки.

  • Индексы не следует использовать для столбцов, содержащих большое количество значений NULL.

  • Столбцы, которыми часто манипулируют, не следует индексировать.