Для будь-якої виробничої бази даних продуктивність SQL-запитів рано чи пізно стає проблемою. Довготривалі запити не тільки споживають системні ресурси, що призвели до повної роботи серверів та додатків, але й можуть призвести до блокування таблиці та пошкодження даних. Отже, оптимізація запитів стає залишається завданням.
Для початку ми пропонуємо деякі керівні принципи оптимізації запитів:
1.Зрозуміти, як база даних виконує ваш запит
Сьогодні всі бази даних мають власний оптимізатор запитів, який пропонує користувачам спосіб зрозуміти, як виконується запит. Наприклад, який індекс з якої таблиці використовується для виконання запиту? Першим кроком до оптимізації запитів є розуміння того, що робить база даних. Різні бази даних мають різні команди для цього. Наприклад, в MySQL можна використовувати ключове слово “EXPLAIN [SQL Query]”, щоб побачити план запиту. В Oracle для перегляду плану запиту можна використати “EXPLAIN PLAN FOR [SQL Query]”.
2.Отримуйте якомога менше даних
Чим більше даних повертається в результаті запиту, тим більше ресурсів потрібно для розширення бази даних, щоб обробити і зберегти ці дані. Тому, наприклад, якщо вам потрібно отримати лише один стовпець з таблиці, не використовуйте ‘SELECT *’.
3.Зберігайте проміжні результати
Іноді логіка запиту може бути досить складною. Часто можна досягти бажаного результату за допомогою підзапитів, вбудованих представлень та операторів типу UNION. У таких випадках проміжні результати не зберігаються в базі даних, а відразу використовуються в запиті. Це може призвести до проблем з продуктивністю, особливо коли проміжні результати мають велику кількість рядків.
Спосіб підвищити продуктивність запиту в таких випадках – зберігати проміжні результати в тимчасовій таблиці, а початковий SQL-запит розбити на кілька SQL-запитів. У багатьох випадках ви навіть можете створити індекс на тимчасовій таблиці, щоб ще більше прискорити виконання запиту. Звичайно, це додає трохи складності в управлінні запитами (наприклад, необхідність керувати тимчасовими таблицями), але прискорення продуктивності запитів часто варте того, щоб потурбуватися про це.
Нижче наведено кілька конкретних стратегій оптимізації запитів.
- Використання індексу
Використання індексу – це перша стратегія, яку слід використовувати для прискорення запиту. Насправді, ця стратегія настільки важлива, що оптимізація індексу також обговорюється. - Агрегована таблиця
Попереднє заповнення таблиць вищих рівнів, щоб менше даних потрібно було аналізувати. - Вертикальне розділення
Розбиття таблиці на стовпці. Ця стратегія зменшує обсяг даних, які потрібно обробити SQL-запиту. - Горизонтальне розділення
Розбиття таблиці на частини за значенням даних, найчастіше за часом. Ця стратегія зменшує обсяг даних, які потрібно обробити SQL-запиту. - Денормалізація
Процес денормалізації об’єднує кілька таблиць в одну. Це прискорює виконання запитів, оскільки потрібно менше з’єднань таблиць. - Налаштування сервера
Кожен сервер має свої параметри, і часто налаштування параметрів сервера таким чином, щоб він міг повною мірою використовувати апаратні ресурси, може значно прискорити виконання запитів.
🚀Долучайтесь до нашої спільноти Telegram:
🚀Долучайтесь до нашої спільноти FaceBook: