Есть ли какой-либо вред, если в Postgresql есть двойной индекс? - PullRequest
6 голосов
/ 21 марта 2012

У меня следующая структура.

CREATE TABLE join_table (
  id integer NOT NULL,
  col_a integer NOT NULL,
  col_b integer NOT NULL
)

CREATE INDEX index_on_col_a ON join_table USING btree (col_a);
CREATE INDEX index_on_col_b ON join_table USING btree (col_b);
CREATE UNIQUE INDEX index_on_col_a_and_col_b ON join_table USING btree (col_a, col_b);

Есть также внешние ключи для col_a и col_b.

Понятно, index_on_col_a больше не нужен, но есть ли какая-то стоимость или польза от ее сохранения или удаления?

Мое предположение:

  • сохранение этого замедлит вставки
  • выбирает, используя просто col_a может быть быстрее, если я сохраню его

1 Ответ

6 голосов
/ 21 марта 2012

Вы можете сбросить индекс на col_a.PostgreSQL может использовать комбинированный индекс, если вы запрашиваете на col_a, а также может использовать индекс, если вы запрашиваете на col_a и col_b.Эти типы запросов могут использовать объединенный индекс:

WHERE col_a = 'val'
WHERE col_a = 'val' AND col_b = 'val'

Объединенный индекс не может использоваться для запроса только col_b или OR соединения col_a и col_b.Поэтому дополнительный индекс над col_b может иметь смысл, если у вас часто есть запросы, запрашивающие только col_b.

Редактировать: Итак: у вас нет преимущества при создании index_on_col_a, но у вас медленная записьскорость.Брось.

...