Когда я должен использовать PostgreSQL Index Include? - PullRequest
0 голосов
/ 12 октября 2019

Предположим, у меня есть запрос, подобный приведенному ниже:

Select 
t2.date,
max(t1.title),
sum(t2.spend)
...
from table1 t1
left join table t2 on t1.id = t2.t1_id
where t1.sup_id = 1
group by t2.date
order by t2.date

PostgreSQL 11+ поддерживает индекс include. Но я не мог понять, когда мы должны это использовать. Не могли бы вы показать это на этом или другом простом примере?

1 Ответ

1 голос
/ 12 октября 2019

Из документации:

Необязательное предложение INCLUDE указывает список столбцов, которые будут включены в индекс как неключевые столбцы. Неключевой столбец нельзя использовать в квалификации поиска при сканировании индекса, и он не учитывается в целях каких-либо ограничений уникальности или исключения, применяемых индексом. Однако сканирование только по индексу может возвращать содержимое неключевых столбцов без необходимости посещения таблицы индекса, поскольку они доступны непосредственно из записи индекса. Таким образом, добавление неключевых столбцов позволяет использовать сканирование только по индексу для запросов, которые в противном случае не могли бы их использовать.

В вашем случае представьте, что у вас есть индекс sup_id. Если вы выберете только sup_id в своем запросе, postgres выполнит сканирование только по индексу, но если вы выберете другие столбцы вместе с идентификатором, такие как заголовок и дата, postgres придется посетить таблицу индексов и выбрать эти столбцы, что медленнее, чемсканирование только по индексу.
Поэтому, если вы хотите, чтобы ваш запрос на выборку выполнялся быстрее, включите в свой индекс нужные вам столбцы. Помните, что это значительно увеличит размер индекса. Используйте его, только если у вас есть небольшое количество столбцов в вашем запросе выбора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...