JAVA_IIBRARY Telegram 1859
Топ-20 техник оптимизации SQL-запросов

1. Индексируй под реальные паттерны запросов (композитные, селективные, covering-индексы), а не просто по числу строк. Следи, чтобы статистика была актуальной.
2. Используй EXISTS для проверки наличия данных; COUNT(*) — только если реально нужен подсчёт.
3. Выбирай конкретные колонки, не пиши SELECT *, чтобы сократить I/O и дать шанс использовать covering-индекс.
4. Пиши sargable-предикаты (которые могут использовать индекс). Медленные коррелированные подзапросы лучше переписать через JOIN или EXISTS.
5. Не лечи ошибки DISTINCT’ом. Исправь логику JOIN и ключи; DISTINCT — только когда реально нужно убрать дубликаты.
6. Фильтруй в WHERE, а HAVING используй только для условий после агрегации.
7. Пиши явные JOIN ... ON, не лепи неявные join’ы через WHERE.
8. Используй keyset pagination вместо OFFSET/LIMIT на больших наборах; для выборки подмножества можно применить TABLESAMPLE (если поддерживается).
9. Предпочитай UNION ALL вместо UNION, если дубликаты допустимы.
10. Заменяй широкие OR на UNION ALL, только если каждая ветка может использовать свой индекс.
11. Тяжёлые запросы запускай вне пиковых часов, при возможности — ограничивай ресурсы или ставь в очередь.
12. Избегай OR в условиях JOIN, можно использовать вычисляемые колонки или UNION ALL, если это позволит использовать индекс.
13. Используй GROUP BY, когда нужны агрегированные строки, и оконные функции — когда нужно видеть строки с агрегатами рядом.
14. Используй временные/derived таблицы, если они реально сокращают работу или добавляют статистику; но помни, что это может заблокировать pushdown-оптимизации.
15. При массовой загрузке данных отключай/удаляй некластерные индексы, вставляй пакетами, потом перестраивай. PK/кластерный индекс можно оставить, если помогает.
16. Используй материализованные представления для редко меняющихся и дорогих агрегатов, продумай их обновление и инвалидацию.
17. Избегай не-sargable сравнений (например, <>) по малоселективным колонкам; лучше перепиши в диапазоны.
18. Минимизируй коррелированные подзапросы на больших выборках, переходи на join’ы или EXISTS.
19. Выбирай INNER или LEFT/RIGHT по смыслу, но помни: INNER JOIN обычно быстрее, если подходит по логике.
20. Кешируй часто повторяющиеся выборки: временные таблицы (на сессию), result cache или материализованные представления с продуманными правилами обновления.

Что такое Query Optimizer

Query Optimizer — это компонент СУБД, который определяет наиболее эффективный способ выполнения SQL-запроса, подбирая оптимальный execution plan.

Он принимает SQL-запрос, парсит его и строит синтаксическое дерево. Затем анализирует дерево, чтобы понять, какие способы выполнения возможны.

Далее оптимизатор генерирует альтернативные execution plans — разные варианты выполнения одного и того же запроса. В каждом плане задаётся:

- порядок доступа к таблицам
- типы соединений
- способы фильтрации и сортировки

Каждому плану присваивается стоимость — оценка по числу чтений с диска, времени CPU и другим факторам.

После этого оптимизатор выбирает план с минимальной стоимостью и использует его для реального выполнения запроса.

Узнай больше

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
11👍3



tgoop.com/Java_Iibrary/1859
Create:
Last Update:

Топ-20 техник оптимизации SQL-запросов

1. Индексируй под реальные паттерны запросов (композитные, селективные, covering-индексы), а не просто по числу строк. Следи, чтобы статистика была актуальной.
2. Используй EXISTS для проверки наличия данных; COUNT(*) — только если реально нужен подсчёт.
3. Выбирай конкретные колонки, не пиши SELECT *, чтобы сократить I/O и дать шанс использовать covering-индекс.
4. Пиши sargable-предикаты (которые могут использовать индекс). Медленные коррелированные подзапросы лучше переписать через JOIN или EXISTS.
5. Не лечи ошибки DISTINCT’ом. Исправь логику JOIN и ключи; DISTINCT — только когда реально нужно убрать дубликаты.
6. Фильтруй в WHERE, а HAVING используй только для условий после агрегации.
7. Пиши явные JOIN ... ON, не лепи неявные join’ы через WHERE.
8. Используй keyset pagination вместо OFFSET/LIMIT на больших наборах; для выборки подмножества можно применить TABLESAMPLE (если поддерживается).
9. Предпочитай UNION ALL вместо UNION, если дубликаты допустимы.
10. Заменяй широкие OR на UNION ALL, только если каждая ветка может использовать свой индекс.
11. Тяжёлые запросы запускай вне пиковых часов, при возможности — ограничивай ресурсы или ставь в очередь.
12. Избегай OR в условиях JOIN, можно использовать вычисляемые колонки или UNION ALL, если это позволит использовать индекс.
13. Используй GROUP BY, когда нужны агрегированные строки, и оконные функции — когда нужно видеть строки с агрегатами рядом.
14. Используй временные/derived таблицы, если они реально сокращают работу или добавляют статистику; но помни, что это может заблокировать pushdown-оптимизации.
15. При массовой загрузке данных отключай/удаляй некластерные индексы, вставляй пакетами, потом перестраивай. PK/кластерный индекс можно оставить, если помогает.
16. Используй материализованные представления для редко меняющихся и дорогих агрегатов, продумай их обновление и инвалидацию.
17. Избегай не-sargable сравнений (например, <>) по малоселективным колонкам; лучше перепиши в диапазоны.
18. Минимизируй коррелированные подзапросы на больших выборках, переходи на join’ы или EXISTS.
19. Выбирай INNER или LEFT/RIGHT по смыслу, но помни: INNER JOIN обычно быстрее, если подходит по логике.
20. Кешируй часто повторяющиеся выборки: временные таблицы (на сессию), result cache или материализованные представления с продуманными правилами обновления.

Что такое Query Optimizer

Query Optimizer — это компонент СУБД, который определяет наиболее эффективный способ выполнения SQL-запроса, подбирая оптимальный execution plan.

Он принимает SQL-запрос, парсит его и строит синтаксическое дерево. Затем анализирует дерево, чтобы понять, какие способы выполнения возможны.

Далее оптимизатор генерирует альтернативные execution plans — разные варианты выполнения одного и того же запроса. В каждом плане задаётся:

- порядок доступа к таблицам
- типы соединений
- способы фильтрации и сортировки

Каждому плану присваивается стоимость — оценка по числу чтений с диска, времени CPU и другим факторам.

После этого оптимизатор выбирает план с минимальной стоимостью и использует его для реального выполнения запроса.

Узнай больше

👉 Java Portal

BY Java Portal | Программирование




Share with your friend now:
tgoop.com/Java_Iibrary/1859

View MORE
Open in Telegram


Telegram News

Date: |

Telegram Android app: Open the chats list, click the menu icon and select “New Channel.” Read now best-secure-messaging-apps-shutterstock-1892950018.jpg As of Thursday, the SUCK Channel had 34,146 subscribers, with only one message dated August 28, 2020. It was an announcement stating that police had removed all posts on the channel because its content “contravenes the laws of Hong Kong.” With the sharp downturn in the crypto market, yelling has become a coping mechanism for many crypto traders. This screaming therapy became popular after the surge of Goblintown Ethereum NFTs at the end of May or early June. Here, holders made incoherent groaning sounds in late-night Twitter spaces. They also role-played as urine-loving Goblin creatures.
from us


Telegram Java Portal | Программирование
FROM American