From d20df572a654e8026a9816fabbf27a8997d4747a Mon Sep 17 00:00:00 2001 From: Struchkov Mark Date: Thu, 31 Oct 2024 18:45:22 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A7=D0=B0=D1=81=D1=82=D0=B8=D1=87=D0=BD?= =?UTF-8?q?=D1=8B=D0=B9=20=D0=B8=D0=BD=D0=B4=D0=B5=D0=BA=D1=81.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dev/database/postgresql/pg_utils.md | 2 +- .../postgresql/Индекс в PostgreSQL.md | 16 +++++++-------- .../Оптимизация SQL запросов в PostgreSQL.md | 6 +++--- .../Создание индекса в PostgreSQL.md | 2 +- .../postgresql/Таблица статистик pg_stats.md | 2 +- .../{postgresql => }/Частичный индекс.md | 20 +++++++++---------- ...ндексы в PostgreSQL. Как понять, что создавать.md | 2 +- 7 files changed, 25 insertions(+), 25 deletions(-) rename dev/database/{postgresql => }/Частичный индекс.md (85%) diff --git a/dev/database/postgresql/pg_utils.md b/dev/database/postgresql/pg_utils.md index 03b1399d..8bf0ff77 100644 --- a/dev/database/postgresql/pg_utils.md +++ b/dev/database/postgresql/pg_utils.md @@ -11,5 +11,5 @@ linked: - global_reports - `top_tables.sql` - покажет размер таблиц и размер индексов на них. Нужно обратить внимания на таблицы, размер индексов которых приближается к размеру таблицы или больше его. -- `indexes_with_nulls.sql` - позволяет найти индексы, которые содержат множество null значений. Их можно пересоздать в виде [[Частичный индекс|частичных индексов]]. +- `indexes_with_nulls.sql` - позволяет найти индексы, которые содержат множество null значений. Их можно пересоздать в виде [[../Частичный индекс|частичных индексов]]. - `low_used_indexes.sql` - показывает индексы по которым мало чтения. \ No newline at end of file diff --git a/dev/database/postgresql/Индекс в PostgreSQL.md b/dev/database/postgresql/Индекс в PostgreSQL.md index 27f0ec9a..688a6796 100644 --- a/dev/database/postgresql/Индекс в PostgreSQL.md +++ b/dev/database/postgresql/Индекс в PostgreSQL.md @@ -12,7 +12,7 @@ date: 2024-03-31 - **Распухание индексов** (bloat) — это проблема увеличения размера индексов со временем, требующая переиндексации. - [[Создание индекса в PostgreSQL]] -- [[Частичный индекс]] +- [[../Частичный индекс]] - [[Составной индекс в PostgreSQL]] **Типы индексов:** @@ -37,13 +37,13 @@ date: 2024-03-31 ### Дочерние заметки -- [[Создание индекса в PostgreSQL]] -- [[Частичный индекс]] -- [[Составной индекс в PostgreSQL]] - [[B-tree индекс в PostgreSQL]] -- [[Hash индекс в PostgreSQL]] -- [[Gist индекс в PostgreSQL]] -- [[SP-GiST индекс в PostgreSQL]] -- [[GIN индекс в PostgreSQL]] - [[BRIN индекс в PostgreSQL]] +- [[GIN индекс в PostgreSQL]] +- [[Gist индекс в PostgreSQL]] +- [[Hash индекс в PostgreSQL]] +- [[SP-GiST индекс в PostgreSQL]] +- [[Создание индекса в PostgreSQL]] +- [[Составной индекс в PostgreSQL]] +- [[Частичный индекс]] diff --git a/dev/database/postgresql/Оптимизация SQL запросов в PostgreSQL.md b/dev/database/postgresql/Оптимизация SQL запросов в PostgreSQL.md index de5f5ba9..932dad7d 100644 --- a/dev/database/postgresql/Оптимизация SQL запросов в PostgreSQL.md +++ b/dev/database/postgresql/Оптимизация SQL запросов в PostgreSQL.md @@ -51,9 +51,9 @@ select relname, seq_scan, idx_scan, vacuum_count from pg_stat_user_tables ### Дочерние заметки +- [[pageinspect]] +- [[pg_stat_statements]] +- [[Профилирование запросов в PostgreSQL]] - [[Таблица статистик pg_stats]] - [[Частичный индекс]] -- [[pageinspect]] -- [[Профилирование запросов в PostgreSQL]] -- [[pg_stat_statements]] diff --git a/dev/database/postgresql/Создание индекса в PostgreSQL.md b/dev/database/postgresql/Создание индекса в PostgreSQL.md index 33cfaf39..554db110 100644 --- a/dev/database/postgresql/Создание индекса в PostgreSQL.md +++ b/dev/database/postgresql/Создание индекса в PostgreSQL.md @@ -18,7 +18,7 @@ date: 2024-10-21 **Полезные советы:** - [[../Селективность колонки|Селективность колонки]]: чем выше селективность, тем эффективнее работает индекс. -- **Частичные индексы**: используйте [[частичный индекс]], чтобы уменьшить размер индекса и повысить эффективность. +- **Частичные индексы**: используйте [[../Частичный индекс]], чтобы уменьшить размер индекса и повысить эффективность. *** ## Мета информация **Область**:: [[../../../meta/zero/00 PostgreSQL|00 PostgreSQL]] diff --git a/dev/database/postgresql/Таблица статистик pg_stats.md b/dev/database/postgresql/Таблица статистик pg_stats.md index 828a43a9..399577b2 100644 --- a/dev/database/postgresql/Таблица статистик pg_stats.md +++ b/dev/database/postgresql/Таблица статистик pg_stats.md @@ -22,7 +22,7 @@ SELECT * FROM pg_stats WHERE tablename = 'your_table_name' AND attname = 'column > [!WARNING] > Данные в `pg_stats` основаны на выборке, и поэтому могут не всегда точно отражать реальное состояние таблицы, особенно если данные часто изменяются. Для более точной оценки можно увеличить выборку строк с помощью настройки статистики ## Советы по анализу -- При большом значении `null_frac` остальные параметры могут иметь меньшее значение. На основе этой информации можно уменьшить размер индекса, создав [[Частичный индекс]]. +- При большом значении `null_frac` остальные параметры могут иметь меньшее значение. На основе этой информации можно уменьшить размер индекса, создав [[../Частичный индекс]]. - Если `n_distinct` показывает низкую уникальность, возможно, индекс на этой колонке не принесет значительного ускорения, так как слишком много строк имеют одинаковые значения (Низкая [[../Селективность колонки|селективность]]). В таком случае стоит рассмотреть пересмотр структуры запроса или таблицы. - Высокое значение `correlation` (близкое к 1 или -1) означает, что данные отсортированы, что может существенно ускорить диапазонные запросы. В таких случаях планировщик может использовать последовательное сканирование, что может быть быстрее, чем случайное чтение. *** diff --git a/dev/database/postgresql/Частичный индекс.md b/dev/database/Частичный индекс.md similarity index 85% rename from dev/database/postgresql/Частичный индекс.md rename to dev/database/Частичный индекс.md index 1daeaac3..6f25a483 100644 --- a/dev/database/postgresql/Частичный индекс.md +++ b/dev/database/Частичный индекс.md @@ -26,7 +26,7 @@ WHERE fk_id IS NOT NULL; **Когда использовать частичные индексы:** - Когда необходимо уменьшить размер индекса за счёт исключения ненужных записей, что позволяет сэкономить место на диске и ускорить операции поиска. -- Когда таблица содержит большое количество записей с одинаковыми значениями (низкая [[../Селективность колонки|селективность]]), и вам нужно индексировать только те записи, которые имеют уникальные или более специфичные значения. +- Когда таблица содержит большое количество записей с одинаковыми значениями (низкая [[Селективность колонки|селективность]]), и вам нужно индексировать только те записи, которые имеют уникальные или более специфичные значения. - В ситуациях, когда индекс нужен для работы с данными, которые соответствуют определённому условию, например, только "необработанные" записи. ## Применение частичных индексов ### Таблицы с колонкой статуса @@ -34,25 +34,25 @@ WHERE fk_id IS NOT NULL; Возьмем типичную табличку, в которой есть какие-то статусы мы хотим находить данные по этому статусу. -![300](../../../meta/files/images/Pasted%20image%2020240331095959.png) -![600](../../../meta/files/images/Pasted%20image%2020240331100144.png) +![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) +![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.13.39.png) Почти идеальный: -![600](../../../meta/files/images/Снимок%20экрана%202024-03-31%20в%2010.15.06.png) -![500](../../../meta/files/images/Pasted%20image%2020240331101612.png) +![600](../../meta/files/images/Снимок%20экрана%202024-03-31%20в%2010.15.06.png) +![500](../../meta/files/images/Pasted%20image%2020240331101612.png) -Идеальный. Совмещаем и [[../../../dev/database/postgresql/Составной индекс в PostgreSQL|составной индекс]] и частичный. +Идеальный. Совмещаем и [[postgresql/Составной индекс в PostgreSQL|составной индекс]] и частичный. -![[../../../meta/files/images/Pasted image 20241021225124.png]] +![[../../meta/files/images/Pasted image 20241021225124.png]] ### Для мягкого удаления Представьте, что вам нужно поддерживать уникальность данных, например, адресов электронной почты в таблице базы данных. Однако в таблице есть строки, [[../../../../../_inbox/Tombstone|помеченные как удаленные]] с помощью поля `deleted_at`, и они также остаются в базе данных. В такой ситуации создание уникального индекса на поле с электронной почтой становится невозможным из-за дублирующихся значений. Частичный индекс решает эту проблему, позволяя включать в индекс только записи, которые не помечены как удаленные. @@ -68,7 +68,7 @@ CREATE UNIQUE INDEX users_email_uniq ON users ( *** ## Мета информация -**Область**:: [[../../../meta/zero/00 PostgreSQL|00 PostgreSQL]] +**Область**:: [[../../meta/zero/00 PostgreSQL|00 PostgreSQL]] **Родитель**:: [[Индекс в PostgreSQL]], [[Оптимизация SQL запросов в PostgreSQL]] **Источник**:: **Создана**:: [[2024-10-21]] diff --git a/source/lecture/Доклад. Индексы в PostgreSQL. Как понять, что создавать.md b/source/lecture/Доклад. Индексы в PostgreSQL. Как понять, что создавать.md index 74642ba9..c95355cc 100644 --- a/source/lecture/Доклад. Индексы в PostgreSQL. Как понять, что создавать.md +++ b/source/lecture/Доклад. Индексы в PostgreSQL. Как понять, что создавать.md @@ -107,7 +107,7 @@ date: 2022-10-14 ![500](../../meta/files/images/Pasted%20image%2020240331101612.png) -Идеальный. Совмещаем и [[../../dev/database/postgresql/Составной индекс в PostgreSQL|составной индекс]] и [[../../dev/database/postgresql/Частичный индекс|Частичный индекс]] +Идеальный. Совмещаем и [[../../dev/database/postgresql/Составной индекс в PostgreSQL|составной индекс]] и [[../../dev/database/Частичный индекс|Частичный индекс]] ![[../../meta/files/images/Pasted image 20241021225124.png]] ### Онлайн статистика