Допустим, у меня есть следующая таблица
CREATE TABLE tbl
(
id uuid NOT NULL DEFAULT gen_random_uuid(),
col_a uuid NOT NULL,
col_b character varying NOT NULL,
PRIMARY KEY (id)
);
И я бы хотел, чтобы она была уникальной над (col_a, col_b), поэтому я бы также создал следующий индекс
CREATE UNIQUE INDEX tbl_unique_idx ON tbl USING btree (col_a, col_b);
Пока все хорошо, мой вопрос, учитывая, что я хочу, чтобы следующие два запроса в полной мере использовали индексы, потребуются ли мне дополнительные индексы?
SELECT * FROM tbl WHERE col_a=$1 ORDER BY col_b;
SELECT * FROM tbl WHERE col_a=$1 AND col_b=$2;
По сути, мы всегда будем фильтровать по col_a, может Postgesиспользовать tbl_unique_idx здесь?Мы также всегда либо сортируем, либо фильтруем по col_b (в дополнение к фильтрации по col_a), поэтому может ли он использовать тот же индекс или потребовать свой собственный индекс?
Таблица может достигать многих миллионов записей, поэтому я 'м, чтобы не иметь избыточных индексов.В настоящее время я использую PostgreSQL 10, но могу получить обновление до 11, если есть явная выгода.