| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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...) и т.д |