2024-11-05 00:33:37 +03:00
---
aliases:
tags:
- maturity/🌱
- best-practices
date: 2024-11-05
---
Часто в приложениях есть таблицы, которые содержат колонку статуса (`state`). Обычно статус разделяет записи на "обработанные" и "необработанные". Индекс нам часто нужен именно по необработанным данным. Создавая [[Частичный индекс|частичный индекс]] только по необработанным данным, мы можем ускорить выполнение запроса и уменьшить размер индекса.
Возьмем типичную табличку, в которой есть какие-то статусы мы хотим находить данные по этому статусу.
![300 ](../../meta/files/images/Pasted%20image%2020240331095959.png )
![600 ](../../meta/files/images/Pasted%20image%2020240331100144.png )
Часто появляется желание сделать индекс по полю статуса:
![600 ](../../meta/files/images/Снимок%20экр а на %202024-03-31%20в%2010.07.02.png )
Н о по факту мы индексируем поле, которое имеет небольшую [селективность ](../../dev/database/Селективность%20ко ло нки.md ). Такой индекс не эффективный.
Хороший вариант в данном случае:
![600 ](../../meta/files/images/Снимок%20экр а на %202024-03-31%20в%2010.13.39.png )
Почти идеальный:
![600 ](../../meta/files/images/Снимок%20экр а на %202024-03-31%20в%2010.15.06.png )
![500 ](../../meta/files/images/Pasted%20image%2020240331101612.png )
Идеальный. Совмещаем и [[postgresql/Составной индекс в PostgreSQL|составной индекс]] и частичный.
![[../../meta/files/images/Pasted image 20241021225124.png]]
***
## Мета информация
2024-11-24 10:08:20 +03:00
**Область**:: [[../../meta/zero/00 Реляционная база данных|00 Реляционная база данных]]
2024-11-05 00:33:37 +03:00
**Родитель**::
**Источник**::
**Создана**:: [[2024-11-05]]
**Автор**::
### Дополнительные материалы
-
### Дочерние заметки
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->