44 lines
3.9 KiB
Markdown
44 lines
3.9 KiB
Markdown
---
|
||
aliases:
|
||
tags:
|
||
- maturity/🌱
|
||
date: 2024-10-21
|
||
---
|
||
Можно создать частичный индекс по условию, который покрывает только записи, удовлетворяющие определенному условию `WHERE`.
|
||
|
||
Например, можно исключить из индекса по внешнему ключу (FK) значения `NULL`:
|
||
|
||
```sql
|
||
CREATE INDEX fk_not_null ON pgconf(fk_id)
|
||
WHERE fk_id IS NOT NULL;
|
||
```
|
||
|
||
Частичные индексы позволяют не только уменьшить размер индекса, но и обеспечить более эффективную работу с таблицами, содержащими данные, которые имеют различный статус (например, активные и удаленные записи). Это особенно полезно в случаях, когда необходимо поддерживать уникальность данных и при этом исключить определенные записи из индекса, такие как удаленные или обработанные.
|
||
|
||
**Преимущества:**
|
||
- **Уменьшение размера индекса**: Индекс включает только необходимые записи, что уменьшает его общий объём.
|
||
- **Ускорение запросов**: Частичный индекс может улучшить производительность запросов, особенно если он используется для выборки узко определённых данных.
|
||
- **Оптимизация операций обновления**: Поскольку индекс обновляется только для определённых строк, уменьшаются накладные расходы на запись и обновление данных.
|
||
|
||
**Недостатки:**
|
||
- **Ограниченная применимость**: Частичные индексы не всегда подходят, особенно для данных с высокой селективностью, где обычные индексы будут более эффективны.
|
||
- **Сложность настройки**: Необходимо тщательно выбирать условия `WHERE`, чтобы получить максимальную пользу от частичного индекса. Неправильный выбор условий может привести к ухудшению производительности.
|
||
|
||
**Когда использовать частичные индексы:**
|
||
- Когда необходимо уменьшить размер индекса за счёт исключения ненужных записей, что позволяет сэкономить место на диске и ускорить операции поиска.
|
||
- [[Использование малоселективных полей для оптимизации чтения страниц]]
|
||
- [[Таблицы с колонкой статуса]]. В ситуациях, когда индекс нужен для работы с данными, которые соответствуют определённому условию, например, только "необработанные" записи.
|
||
***
|
||
## Мета информация
|
||
**Область**:: [[../../meta/zero/00 PostgreSQL|00 PostgreSQL]]
|
||
**Родитель**:: [[Индекс в PostgreSQL]], [[Оптимизация SQL запросов в PostgreSQL]]
|
||
**Источник**::
|
||
**Создана**:: [[2024-10-21]]
|
||
**Автор**::
|
||
### Дополнительные материалы
|
||
-
|
||
|
||
### Дочерние заметки
|
||
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->
|
||
|