#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. Нет. Это не может использовать ваш индекс (или, по крайней мере, маловероятно, что индекс будет использоваться).