Оптимизация запросов 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. Без индексов в Базе Данных вообще, жизнь - не жизнь.
Комментарии
Отправить комментарий