В какой степени Postgres может повторно использовать индексы?

#postgresql

#postgresql

Вопрос:

Например, если я создам индекс на

A, B, C

А затем впоследствии создавать индекс на

A, B, D

Используется ли исходная часть A, B повторно или все создается заново с нуля?

Ответ №1:

Нет, каждый индекс — это новый отдельный объект. Проверьте pg_class.

Редактировать: Вам не нужно создавать два индекса, содержащих столбцы A и B дважды. Создайте индекс для A, B и C, а затем другой индекс для D. PostgreSQL может использовать два индекса, когда это необходимо.

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

1. Если вы используете один из C или D намного чаще, чем другой, вы можете даже индексировать на (A, B, C) и (D) тоже (обратный D является более популярным). Индекс из 3 столбцов может использоваться для удовлетворения запросов (A, B), а затем объединяться с индексом на (D). Это нужно делать только в том случае, если комбинация (A, B, C) действительно распространена, потому что индекс из 3 столбцов будет больше, чем индекс из 2 столбцов.

Ответ №2:

Это новый индекс каждый раз, как отметил Фрэнк.

Также обратите внимание, что часто индекса в один столбец на самом деле достаточно, если вы постоянно не упорядочиваете по C с соответствующим where ограничением на A и B вместе с предложением limit . Если нет, планировщик Postgres будет достаточно умен, чтобы использовать растровый индекс, как описано в примечаниях к документации по многоколоночным индексам.