6 советов, как улучшить производительность выражений SELECT в SQL

29 Апреля 2015
Одним из способов улучшить производительность работы с базой данных – это поработать над выражениями SELECT при обращении к ней. На что надо обратить внимание?

Проверьте индексы

Индексы должны быть для всех полей, используемых в операторах WHERE и JOIN.

Ограничьте размер вашего рабочего набора данных

Посмотрите на таблицы, которые вы используете в выражениях SELECT, с точки зрения того, можно ли применить фильтры там, где используется WHERE. Классический пример – это когда сначала запрос исполняется быстро, пока в базе данных всего несколько тысяч строк в таблице. По мере того, как приложение растет, запрос выполняется все медленнее. Решение может быть таким простым, как ограничить запрос данными текущего месяца. Если у вас в запросах используются вложенные SELECT, попробуйте применить фильтры к внутренним выражениям.

Выбирайте только те поля, которые вам нужны

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

При использовании столбцовых баз данных, чем меньше столбцов вы запрашиваете, тем меньше будет нагрузка на ввод-вывод.

Удалите ненужные таблицы

Причина точно такая же, как и причина для удаления ненужных полей. Создание выражений в SQL – это итерационный процесс, в ходе которого вы пробуете разные выражения и тестируете их. В процессе разработки может оказаться так, что вы добавили таблицу в запрос, которая никак не влияет на данные, которые возвращаются запросом. Удаляя операторы JOIN к ненужным таблицам, вы снижаете нагрузку на базу данных.

Уберите OUTER JOIN

Иногда это проще сказать, чем сделать, все зависит от того, какое влияние вы имеете на содержимое таблиц. Одно из решений, которое поможет удалить OUTER JOIN – это разместить строки-«заменители» в обоих таблицах.

Например, у вас две таблицы, и вы используете OUTER JOIN:

таблица параметров

Решением будет добавить дополнительную строку в таблице с клиентами и изменить все значения NULL в таблице с продажами на ключ-«заменитель».

таблица параметров

Вы не только устанили необходимость использовать OUTER JOIN, а также стандартизировали, как в ваших таблицах представлены торговые представители без клиентов. Другим разработчикам больше не понадобится писать конструкции типа ISNULL(customer_id, “No customer yet”).

Уберите вычисляемые поля из JOIN и WHERE

Это также может оказаться сложно сделать, в зависимости от того, какие у вас есть права на изменения в схеме данных. Это можно сделать, если у вас есть возможность создать поле с вычисляемым значением, которое используется в JOIN.

Возьмем следующее выражение:

Уберите вычисляемые поля из JOIN и WHERE

Производительность может быть улучшена, если мы добавим столбец с годом и месяцем в таблице продаж. Измененное SQL-выражение тогда будет выглядеть так:

Уберите вычисляемые поля из JOIN и WHERE

По материалам статьи с dzone.com 
Получить консультацию специалиста