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

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

Итак первое, прежде чем изучать трюки или ещё как-то извращаться с SQL, нужно знать, а для знающих не забывать, что при обычном SELECT с множественным условием, Oracle работает по схеме short-circuit. Это означает, что порядок условий должен быть наиболее оптимальным, так как Oracle при отсутствии необходимости выполнять следующие условия, может отработать только на первых - то есть какую-то часть сравнений вовсе опустить, если они не нужны. К примеру, вы хотите выбрать из таблицы записи в промежутке между датами и при этом отфильтровать их по нулевому полю:

SELECT * FROM Table t WHERE t.SomeField not null

            AND t.StartDate between SomeDate1 and SomeDate1+0.999999

Данный запрос нужно выполнить и посмотреть не будет ли он эффективнее, если сначала поставить условие выбора даты. Таким образом, Oracle сразу отфильтрует эти записи (причем часто, большую часть), и второе условие будет "проходить" по меньшему их количеству, а не по всем. Прирост скорости может быть ощутим.

Второе базовое знание, необходимое для оптимизации запросов. В этом очень помогает План запроса. Многие утилиты позволяют просмотреть такой план, например Oracl SQL Developer. Выполняете запрос, потом жмёте кнопочку "Explain plan" и смотрите, какое условие сколько раз выполнялось. К примеру, на поля условий, по которым "идёт" FULL проход, необходимо обязательно поставить INDEX. Без индексов в Базе Данных вообще, жизнь - не жизнь.

Комментарии

Популярные

Кастомизируем ASP.NET Identity 2.0

Делаем себе бесплатный VPN на Amazon EC2

Выбираем все плюсы из трех парадигм Entity Framework