Оптимизация запросов

Источник: http://www.articlesbase.com/databases-articles/query-optimization-3111199.html

 

Рано или поздно производительность SQL запросов становится проблемой для любой базы данных. Длительные запросы могут привести как к замыканиям таблиц и искажению данных, так и к увеличению потребляемых ресурсов, что увеличивает время работы приложений. Таким образом, оптимизация запросов очень важна.

Основные принципы оптимизации запросов:

1.    Понимайте, как происходит выполнение запроса в вашей базе данных.

В настоящее время все базы данных располагают инструментами, облегчающими понимание того, как запрос выполняется. Первый шаг оптимизации запроса – понимание того, что делает база данных для его оптимизации. В разных СУБД эти инструменты устроены по-разному. Для MySQL используйте "EXPLAIN [SQL Запрос]"; для Oracle – "EXPLAIN PLAN FOR [SQL запрос]".

 

2.    Запрашивайте как можно меньше данных.

Ресурсы, затрачиваемые на выполнение запроса, зависят от размера запрашиваемых данных. Вместо “SELECT *” используйте SELECT с перечислением названий полей, чьи значения вас интересуют. В этом случае запрос выполнится быстрее.

 

3.    Храните промежуточные результаты.

Использование представлений, объединений и подзапросов – распространённая технология среди администраторов БД. В таких случаях для выполнения запросов значения используются напрямую, без выполнения дополнительных запросов. Однако, когда количество получаемых данных велико, это может вызвать проблемы с производительностью.

При больших объемах данных для эффективного выполнения запроса можно использовать таблицы для временного хранения данных, или разбить один запрос на несколько подзапросов.

Ниже приведены несколько принципиальных стратегий оптимизации запросов.

·         Использование индексов.

Один из быстрых и лёгких способов увеличить производительность запроса – использование индексов.

·         Объединение таблиц.

Предварительно формируйте таблицы на более высоких уровнях, что уменьшает общие количество данных, которые должны быть проанализированы.

·         Вертикальное разбиение.

Разбивайте таблицы на столбцы. Этот способ помогает уменьшить общее количество данных, которые должны быть обработаны.

·         Горизонтальное разбиение.

Разделяйте таблицы по значению данных как можно чаще.

·         Денормализация.

Процесс денормализации ускоряет выполнения запросов, т.к. он объединяет несколько таблиц в одну. Таким образом, становится необходимо провести меньше объединений таблиц.

·         Настройка сервера.

Каждый сервер имеет свой собственный набор параметров, и часто настройки сервера, позволяющие в полной мере использовать аппаратные ресурсы, могут существенно ускорить обработку запросов.