Раскрытие подзапросов
В зависимости от сложности SQL-запроса оптимизатор пытается преобразовать вложенные подзапросы в одноуровневые запросы.
Например,
Исходная конструкция Оптимизированная конструкция ---------------------------------------------------------------------- SELECT * FROM SELECT * FROM AUTO (SELECT * FROM AUTO WHERE MAKE WHERE MAKE = 'FORD' AND ='FORD') MODEL LIKE '%V8%'; WHERE MODEL LIKE '%V8%';
Это преобразование не выполняется для запросов:
-
с конструкциями GROUP BY и HAVING;
-
со сложными вариантами OUTER JOIN;
-
с внешними ссылками и функциями;
-
содержащих представление (VIEW). (Исключение составляют запросы, содержащие представления без фразы WHERE).
К разновидности этой оптимизации относится преобразование стандартной формы OUTER JOIN в ORACLE-подобную форму записи.
Например,
Исходная конструкция Оптимизированная конструкция --------------------------------------------------------------- SELECT * FROM PERSON SELECT * FROM PERSON,AUTO LEFT OUTER JOIN AUTO WHERE PERSON.PERSONID = ON PERSON.PERSONID = AUTO.RERSONID(+) AUTO.RERSONID AND NAME = 'KIM'; WHERE NAME = 'KIM';