Оптимизация запросов
Рано или поздно производительность SQL запросов становится проблемой для любой базы данных. Длительные запросы могут привести как к замыканиям таблиц и искажению данных, так и к увеличению
потребляемых ресурсов, что увеличивает время работы приложений. Таким образом, оптимизация запросов очень важна.
Основные принципы оптимизации
запросов:
1.
Понимайте, как происходит выполнение
запроса в вашей базе данных.
В настоящее время все базы данных располагают инструментами,
облегчающими понимание того, как запрос выполняется. Первый шаг
оптимизации запроса – понимание того, что делает база данных для его
оптимизации. В разных СУБД эти инструменты устроены по-разному. Для MySQL используйте "EXPLAIN [SQL Запрос]";
для
Oracle – "EXPLAIN PLAN FOR [SQL запрос]".
2.
Запрашивайте как можно меньше данных.
Ресурсы, затрачиваемые на выполнение запроса, зависят от размера
запрашиваемых данных. Вместо “SELECT *” используйте SELECT с перечислением
названий полей, чьи значения вас интересуют. В этом случае запрос выполнится
быстрее.
3.
Храните промежуточные результаты.
Использование представлений, объединений и подзапросов –
распространённая технология среди администраторов БД. В таких случаях для
выполнения запросов значения используются напрямую, без выполнения
дополнительных запросов. Однако, когда количество получаемых данных велико, это
может вызвать проблемы с производительностью.
При больших объемах
данных для эффективного выполнения запроса можно использовать таблицы для временного хранения данных, или разбить один запрос на несколько
подзапросов.
Ниже
приведены несколько принципиальных стратегий оптимизации запросов.
·
Использование индексов.
Один из быстрых и лёгких способов увеличить производительность запроса –
использование индексов.
·
Объединение таблиц.
Предварительно формируйте таблицы на
более высоких уровнях, что уменьшает общие количество данных, которые должны
быть проанализированы.
·
Вертикальное разбиение.
Разбивайте таблицы на столбцы. Этот
способ помогает уменьшить общее количество данных, которые должны быть
обработаны.
·
Горизонтальное разбиение.
Разделяйте таблицы по значению данных
как можно чаще.
·
Денормализация.
Процесс денормализации
ускоряет выполнения запросов, т.к. он объединяет несколько таблиц в одну. Таким
образом, становится необходимо провести меньше объединений таблиц.
·
Настройка сервера.
Каждый сервер имеет свой собственный набор параметров,
и часто настройки сервера, позволяющие в полной мере использовать аппаратные
ресурсы, могут существенно ускорить обработку запросов.