Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Oracle > Порядок выполнения условий в запросе


Автор: blur 21.6.2007, 17:51
Подскажите, как в Oracle лучше записывать условия: в секции джойнов (при связке таблиц), либо после джойнов (в разделе where) ?

Автор: Sqlninja 21.6.2007, 17:54
Нотация роли не играет, оптимизатор приводит вс запросы к едином оптимальному (по его мнению) виду.

Автор: blur 23.6.2007, 01:25
Спасибо, тогда еще такой вопрос: имеет ли значение порядок связки таблиц? Например, сначала связывать небольшие таблицы, потом побольше и т.д. 

Автор: Sqlninja 25.6.2007, 14:16
Порядок соединения (access order) является одним из базовых понятий в теории SQL тюнинга. Он имеет очень большое значение. Прежде всего здесь играет роль не размер таблиц а селективность выборки из этой таблицы. Чем более эффективен для заданной таблицы фильтр, который указывается в условиях WHERE, тем меньше строк из нее выберется. Таблицы следует соединять в порядке убывания селективности, то есть, чтобы сначала срабатывали самые эффективные фильтры. 

Порядок соединения обеспечивается либо: 
1) подсказкой оптимизатору /*+ORDERED*/
В данном случае оптимизатор постарается извлечь данные из таблиу именно в том порядке, в котором они перечислены в предложении FROM. Если, учитывая все условия запроса, данный путь доступа будет недоступен, подсказзка будет проигнорирована.

2) С помощью ANSI нотации, то есть (table1 JOIN table1 on () JOIN table3...) и т.д

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)