(продолжение предыдущего поста)
Покрывающие индексы — это индексы, которые при грамотном использовании способны значительно повысить производительность системы.
Покрывающий индекс — это такой индекс, который используется для получения всех столбцов результата запроса без необходимости обращения к основному хранилищу данных таблицы. Для Postgres это означает обход файла куч таблицы, а для MySQL — обход кластеризованного индекса данных таблицы.
Рассмотрим пример запроса:
SELECT name, email
FROM user
WHERE name > 'C' AND name < 'G';
Если у нас есть индекс только по имени, например:
CREATE INDEX idx_name
ON your_table (name);
База данных может использовать этот индекс для фильтрации результатов, но ей всё равно придётся обращаться к основному хранилищу данных таблицы для получения электронных адресов.
В качестве альтернативы можно использовать составной индекс:
CREATE INDEX idx_name_email
ON your_table (name, email);
В этом случае все необходимые для результирующего набора столбцы хранятся прямо в индексе, что делает запрос более быстрым. Однако есть компромисс: такой индекс занимает больше места. Это классический пример компромисса между пространством и временем!