Индекс базы данных.md
This commit is contained in:
parent
eacf800157
commit
8749f8afcd
@ -64,7 +64,7 @@ UUID версии 4 (V4) — это случайный идентификато
|
|||||||
|
|
||||||
**Недостатки:**
|
**Недостатки:**
|
||||||
- **Не сортируемый**: UUID V4 нельзя отсортировать по времени или другим критериям, так как он полностью основан на случайных данных.
|
- **Не сортируемый**: UUID V4 нельзя отсортировать по времени или другим критериям, так как он полностью основан на случайных данных.
|
||||||
- **Замедленная вставка в БД**: В больших базах данных, по мере увеличения количества записей, время вставки новых записей с UUID V4 может расти. Это связано с тем, что случайные значения распределяются неравномерно, что может вызывать фрагментацию [[database/Индекс в БД|индексов]], особенно при использовании кластеризованных индексов.
|
- **Замедленная вставка в БД**: В больших базах данных, по мере увеличения количества записей, время вставки новых записей с UUID V4 может расти. Это связано с тем, что случайные значения распределяются неравномерно, что может вызывать фрагментацию [[database/Индекс базы данных|индексов]], особенно при использовании кластеризованных индексов.
|
||||||
- **Не содержит полезной информации**: В отличие от UUID версий 1 и 3, UUID V4 не хранит никаких дополнительных данных (например, метку времени или привязку к конкретному объекту).
|
- **Не содержит полезной информации**: В отличие от UUID версий 1 и 3, UUID V4 не хранит никаких дополнительных данных (например, метку времени или привязку к конкретному объекту).
|
||||||
## UUID V5
|
## UUID V5
|
||||||
![](../meta/files/images/Pasted%20image%2020231112134012.png)
|
![](../meta/files/images/Pasted%20image%2020231112134012.png)
|
||||||
|
@ -19,7 +19,7 @@ OLAP (Online Analytical Processing) — это тип нагрузки, кото
|
|||||||
|
|
||||||
Причины выделить OLAP нагрузку:
|
Причины выделить OLAP нагрузку:
|
||||||
- Разный характер нагрузки, требующий долгосрочного хранения и анализа данных.
|
- Разный характер нагрузки, требующий долгосрочного хранения и анализа данных.
|
||||||
- Специфические стратегии [[Индекс в БД|индексирования]] для оптимизации аналитических запросов.
|
- Специфические стратегии [[Индекс базы данных|индексирования]] для оптимизации аналитических запросов.
|
||||||
- Работа с большими объемами данных и их обработка в рамках одного запроса.
|
- Работа с большими объемами данных и их обработка в рамках одного запроса.
|
||||||
- Поддержка исторических данных для анализа трендов и построения отчетов.
|
- Поддержка исторических данных для анализа трендов и построения отчетов.
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@ OLTP (Online Transaction Processing) — это тип нагрузки, кот
|
|||||||
- Прием платежей за сотовую связь.
|
- Прием платежей за сотовую связь.
|
||||||
|
|
||||||
## Лучшие практики для оптимизации производительности
|
## Лучшие практики для оптимизации производительности
|
||||||
- **Использование индексов**: правильно настроенные [[Индекс в БД|индексы]] позволяют быстрее выполнять операции и уменьшить количество операций чтения.
|
- **Использование индексов**: правильно настроенные [[Индекс базы данных|индексы]] позволяют быстрее выполнять операции и уменьшить количество операций чтения.
|
||||||
- [[../../../../_inbox/Шардирование БД|Шардинг]] (разделение таблиц): разделение таблиц на части снижает нагрузку и улучшает производительность.
|
- [[../../../../_inbox/Шардирование БД|Шардинг]] (разделение таблиц): разделение таблиц на части снижает нагрузку и улучшает производительность.
|
||||||
- **Избегание блокировок**: минимизация блокировок таблиц и строк особенно важна при большом количестве параллельных транзакций.
|
- **Избегание блокировок**: минимизация блокировок таблиц и строк особенно важна при большом количестве параллельных транзакций.
|
||||||
- Для OLTP-нагрузки не следует использовать параллельное выполнение запросов, так как это забирает ядро процессора у другого запроса, что может привести к задержкам в обработке транзакций и снижению общей производительности системы. В контексте OLTP важнее минимизировать время выполнения каждого отдельного запроса, а не распределять его между несколькими ядрами. ==Каждый запрос должен выполняться на одном ядре как можно быстрее.==
|
- Для OLTP-нагрузки не следует использовать параллельное выполнение запросов, так как это забирает ядро процессора у другого запроса, что может привести к задержкам в обработке транзакций и снижению общей производительности системы. В контексте OLTP важнее минимизировать время выполнения каждого отдельного запроса, а не распределять его между несколькими ядрами. ==Каждый запрос должен выполняться на одном ядре как можно быстрее.==
|
||||||
|
@ -38,7 +38,7 @@ linked:
|
|||||||
|
|
||||||
Как влиять на оптимизатор?
|
Как влиять на оптимизатор?
|
||||||
- Переписать запрос.
|
- Переписать запрос.
|
||||||
- Использовать [[../../../../../_inbox/Индексы в MySQL|индексы]]
|
- Использовать [[../../../../../_inbox/Индекс в MySQL|индексы]]
|
||||||
- user/force/ignore index. Можем явно указать когда и какие индексы использовать
|
- user/force/ignore index. Можем явно указать когда и какие индексы использовать
|
||||||
- straight_join. Можем задать жесткий порядок join таблиц
|
- straight_join. Можем задать жесткий порядок join таблиц
|
||||||
- @@optimizer_switch. Позволяет включать/отключать правила, которые использует оптимизатор.
|
- @@optimizer_switch. Позволяет включать/отключать правила, которые использует оптимизатор.
|
||||||
|
@ -4,7 +4,7 @@ tags:
|
|||||||
- maturity/🌱
|
- maturity/🌱
|
||||||
date: 2024-03-31
|
date: 2024-03-31
|
||||||
---
|
---
|
||||||
[[../../../meta/zero/00 PostgreSQL|PostgreSQL]] поддерживает несколько типов [[../Индекс в БД|индексов]], каждый из которых предназначен для определённых задач. Выбор типа индекса зависит от структуры данных и характера запросов. В этом разделе приведены основные типы индексов, их особенности и случаи, когда их использование наиболее эффективно.
|
[[../../../meta/zero/00 PostgreSQL|PostgreSQL]] поддерживает несколько типов [[../Индекс базы данных|индексов]], каждый из которых предназначен для определённых задач. Выбор типа индекса зависит от структуры данных и характера запросов. В этом разделе приведены основные типы индексов, их особенности и случаи, когда их использование наиболее эффективно.
|
||||||
|
|
||||||
**Особенности:**
|
**Особенности:**
|
||||||
- Для **первичного ключа** индекс создается автоматически.
|
- Для **первичного ключа** индекс создается автоматически.
|
||||||
@ -25,7 +25,7 @@ date: 2024-03-31
|
|||||||
***
|
***
|
||||||
## Мета информация
|
## Мета информация
|
||||||
**Область**:: [[../../../meta/zero/00 PostgreSQL|00 PostgreSQL]]
|
**Область**:: [[../../../meta/zero/00 PostgreSQL|00 PostgreSQL]]
|
||||||
**Родитель**:: [[../Индекс в БД|Индекс в БД]]
|
**Родитель**:: [[../Индекс базы данных|Индекс базы данных]]
|
||||||
**Источник**::
|
**Источник**::
|
||||||
**Автор**::
|
**Автор**::
|
||||||
**Создана**:: [[2024-03-31]]
|
**Создана**:: [[2024-03-31]]
|
||||||
|
@ -34,8 +34,8 @@ PostgreSQL использует условные единицы для обоз
|
|||||||
|
|
||||||
Если оценочное значение `rows` слишком низкое по сравнению с фактическим количеством строк, это может означать, что статистика таблицы устарела. В таком случае необходимо выполнить `ANALYZE` для обновления статистики и улучшения качества планирования запросов.
|
Если оценочное значение `rows` слишком низкое по сравнению с фактическим количеством строк, это может означать, что статистика таблицы устарела. В таком случае необходимо выполнить `ANALYZE` для обновления статистики и улучшения качества планирования запросов.
|
||||||
## Виды проходов по таблице и индексу
|
## Виды проходов по таблице и индексу
|
||||||
- **Seq Scan**: последовательный просмотр всей таблицы. Это наиболее медленный вариант и обычно нежелателен. Решение — добавить [[../Индекс в БД|индекс]], чтобы ускорить выборку данных.
|
- **Seq Scan**: последовательный просмотр всей таблицы. Это наиболее медленный вариант и обычно нежелателен. Решение — добавить [[../Индекс базы данных|индекс]], чтобы ускорить выборку данных.
|
||||||
- **Index Scan**: использование [[../Индекс в БД|индекса]] для просмотра таблицы.
|
- **Index Scan**: использование [[../Индекс базы данных|индекса]] для просмотра таблицы.
|
||||||
- **Index Only Scan**: использование [[../Покрывающий индекс|покрывающего индекса]], когда все нужные данные находятся в индексе и не требуется дополнительного доступа к таблице.
|
- **Index Only Scan**: использование [[../Покрывающий индекс|покрывающего индекса]], когда все нужные данные находятся в индексе и не требуется дополнительного доступа к таблице.
|
||||||
- **Bitmap Heap Scan**: оптимизация с использованием битовых карт для поиска. Сначала строятся битовые карты с использованием нескольких индексов, затем они комбинируются.
|
- **Bitmap Heap Scan**: оптимизация с использованием битовых карт для поиска. Сначала строятся битовые карты с использованием нескольких индексов, затем они комбинируются.
|
||||||
- **Foreign Scan**: сканирование данных на удаленном сервере, используемое при [[Шардирование в PostgreSQL|шардировании]].
|
- **Foreign Scan**: сканирование данных на удаленном сервере, используемое при [[Шардирование в PostgreSQL|шардировании]].
|
||||||
|
@ -16,7 +16,7 @@ linked:
|
|||||||
- **Исполнение и возврат результатов**: возврат больших объемов данных (например, нескольких гигабайт) значительно замедляет запрос.
|
- **Исполнение и возврат результатов**: возврат больших объемов данных (например, нескольких гигабайт) значительно замедляет запрос.
|
||||||
|
|
||||||
**Как улучшить?**
|
**Как улучшить?**
|
||||||
- **Используйте индексы**: правильно настроенные [[Индекс в БД|индексы]] могут существенно ускорить выполнение.
|
- **Используйте индексы**: правильно настроенные [[Индекс базы данных|индексы]] могут существенно ускорить выполнение.
|
||||||
- **Переписать запрос**: упростите запрос, разделите его на несколько меньших, если это возможно.
|
- **Переписать запрос**: упростите запрос, разделите его на несколько меньших, если это возможно.
|
||||||
|
|
||||||
**Что невозможно улучшить**
|
**Что невозможно улучшить**
|
||||||
|
@ -6,7 +6,7 @@ tags:
|
|||||||
- maturity/🌱
|
- maturity/🌱
|
||||||
date: 2024-06-09
|
date: 2024-06-09
|
||||||
---
|
---
|
||||||
Покрывающий индекс — это [[Индекс в БД|индекс]], который включает в себя все колонки, необходимые для выполнения определенного запроса, без необходимости обращения к основной таблице данных.
|
Покрывающий индекс — это [[Индекс базы данных|индекс]], который включает в себя все колонки, необходимые для выполнения определенного запроса, без необходимости обращения к основной таблице данных.
|
||||||
|
|
||||||
Обычный индекс позволяет ускорить поиск по ключевой колонке, но при этом, чтобы получить данные из других колонок, СУБД все равно обращается к основной таблице. ==Покрывающий индекс, в отличие от обычного, содержит все необходимые для запроса колонки, что исключает необходимость обращения к таблице и, следовательно, улучшает производительность.==
|
Обычный индекс позволяет ускорить поиск по ключевой колонке, но при этом, чтобы получить данные из других колонок, СУБД все равно обращается к основной таблице. ==Покрывающий индекс, в отличие от обычного, содержит все необходимые для запроса колонки, что исключает необходимость обращения к таблице и, следовательно, улучшает производительность.==
|
||||||
|
|
||||||
@ -37,7 +37,7 @@ SELECT column1, column2 FROM table_name WHERE column1 = 'value';
|
|||||||
***
|
***
|
||||||
## Мета информация
|
## Мета информация
|
||||||
**Область**:: [[../../meta/zero/00 Базы Данных|00 Базы Данных]]
|
**Область**:: [[../../meta/zero/00 Базы Данных|00 Базы Данных]]
|
||||||
**Родитель**:: [[Индекс в БД]]
|
**Родитель**:: [[Индекс базы данных]]
|
||||||
**Источник**::
|
**Источник**::
|
||||||
**Автор**::
|
**Автор**::
|
||||||
**Создана**:: [[2024-06-09]]
|
**Создана**:: [[2024-06-09]]
|
||||||
|
@ -9,7 +9,7 @@ date: 2024-03-31
|
|||||||
---
|
---
|
||||||
Селективность колонки в базе данных — это отношение уникальных значений в столбце к общему количеству значений. ==Чем больше уникальных значений, тем выше селективность.== Селективность выражается значением от 0 до 1, где 0 означает отсутствие селективности, а 1 — идеальную селективность.
|
Селективность колонки в базе данных — это отношение уникальных значений в столбце к общему количеству значений. ==Чем больше уникальных значений, тем выше селективность.== Селективность выражается значением от 0 до 1, где 0 означает отсутствие селективности, а 1 — идеальную селективность.
|
||||||
|
|
||||||
Высокая селективность делает колонку отличным кандидатом для [[Индекс в БД|индексирования]], так как это уменьшает количество строк для просмотра и ускоряет поиск. Например, колонка с уникальными идентификаторами пользователей позволяет значительно улучшить производительность запросов.
|
Высокая селективность делает колонку отличным кандидатом для [[Индекс базы данных|индексирования]], так как это уменьшает количество строк для просмотра и ускоряет поиск. Например, колонка с уникальными идентификаторами пользователей позволяет значительно улучшить производительность запросов.
|
||||||
|
|
||||||
Низкая селективность означает много повторяющихся значений. Например, колонка с полом пользователя ("мужской" и "женский"). Индекс на таком столбце обычно малоэффективен, но может быть полезен при использовании с другими более селективными колонками. Это помогает уменьшить объем данных для сканирования.
|
Низкая селективность означает много повторяющихся значений. Например, колонка с полом пользователя ("мужской" и "женский"). Индекс на таком столбце обычно малоэффективен, но может быть полезен при использовании с другими более селективными колонками. Это помогает уменьшить объем данных для сканирования.
|
||||||
|
|
||||||
|
@ -54,7 +54,7 @@ SELECT * FROM orders WHERE order_date >= '2024-01-01';
|
|||||||
***
|
***
|
||||||
## Мета информация
|
## Мета информация
|
||||||
**Область**:: [[../../meta/zero/00 Базы Данных|00 Базы Данных]]
|
**Область**:: [[../../meta/zero/00 Базы Данных|00 Базы Данных]]
|
||||||
**Родитель**:: [[Индекс в БД]]
|
**Родитель**:: [[Индекс базы данных]]
|
||||||
**Источник**::
|
**Источник**::
|
||||||
**Автор**::
|
**Автор**::
|
||||||
**Создана**:: [[2024-06-16]]
|
**Создана**:: [[2024-06-16]]
|
||||||
|
@ -4,6 +4,6 @@ tags:
|
|||||||
telegram:
|
telegram:
|
||||||
work place:
|
work place:
|
||||||
position:
|
position:
|
||||||
date: "[[2024-03-31]]"
|
date: 2024-03-31
|
||||||
aliases: []
|
aliases: []
|
||||||
---
|
---
|
||||||
|
@ -13,7 +13,7 @@ linked:
|
|||||||
- [Репликация БД](../../dev/architecture/highload/Репликация%20БД.md)
|
- [Репликация БД](../../dev/architecture/highload/Репликация%20БД.md)
|
||||||
- [Резервные копии БД](Резервные%20копии%20БД.md)
|
- [Резервные копии БД](Резервные%20копии%20БД.md)
|
||||||
- [Транзакция БД](../../dev/database/Транзакция%20БД.md)
|
- [Транзакция БД](../../dev/database/Транзакция%20БД.md)
|
||||||
- [[../../dev/database/Индекс в БД|Индекс в БД]]
|
- [[../../dev/database/Индекс базы данных|Индекс базы данных]]
|
||||||
- [[../../dev/database/postgresql/Индекс в PostgreSQL|Индекс в PostgreSQL]]
|
- [[../../dev/database/postgresql/Индекс в PostgreSQL|Индекс в PostgreSQL]]
|
||||||
- [[../../../../_inbox/Индекс в MySQL|Индекс в MySQL]]
|
- [[../../../../_inbox/Индекс в MySQL|Индекс в MySQL]]
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user