Индекс Btree PostgreSQL поверх уникального индекса

#sql #postgresql #unique

#sql #postgresql #уникальный

Вопрос:

У меня есть таблица с уникальным индексом.

 CREATE UNIQUE INDEX task_index ON public.task USING btree (id, user);
  

Большинство моих выборок используют where id=?

Так мне все еще нужен индекс в столбце ID? Или уникальный индекс сам индексирует столбец?

Ответ №1:

Уникальный индекс, который вы уже создали, использует дерево B в id качестве первого поля для разделения. Этот индекс должен использоваться для предложения where, содержащего либо только id , либо id и user . В первом случае рассмотрим запрос типа:

 SELECT *
FROM task
WHERE id = 3;
  

Postgres может использовать ваш текущий индекс, чтобы найти поддерево, которое соответствует id = 3 . Для всех конечных узлов под этим поддеревом он может просто сканировать, чтобы найти все совпадающие записи.

Комментарии:

1. Большое вам спасибо, тот же индекс будет работать, если я сделаю где user='something'

2. Нет. Это не может использовать ваш индекс (или, по крайней мере, маловероятно, что индекс будет использоваться).