Порядок таблиц в запросе соединения

Я нашел этот абзац в документации Oracle

если Вы хотите выбрать название каждого отдела наряду с именем его менеджера, можно записать запрос одним из двух способов. В первом примере, который следует, подсказка / ++ приказала, чтобы ++/сказал, чтобы сделать соединение в порядке, таблицы появляются в ИЗ пункта с попыткой оптимизировать порядок соединения.

SELECT /*+ordered*/ d.NAME, e.NAME
FROM DEPT d, EMP e WHERE d.MGR = e.SS#

или:

SELECT /*+ordered*/ d.NAME, e.NAME 
FROM EMP e, DEPT d WHERE d.MGR = e.SS# 

Предположим, что существует 10 отделов и 1 000 сотрудников, и что внутренняя таблица в каждом запросе имеет индекс на объединяющем столбце. В первом запросе первая таблица производит 10 строк квалификации (в этом случае, целая таблица). Во втором запросе первая таблица производит 1 000 строк квалификации. Первый запрос получит доступ ко временам таблицы 10 EMP и просканирует таблицу DEPT однажды. Второй запрос просканирует таблицу EMP однажды, но получит доступ ко временам таблицы 1000 DEPT. Поэтому первый запрос будет работать намного лучше. Как показывает опыт, таблицы должны быть расположены от самых маленьких эффективных строк числа до самого большого эффективного количества строк. Эффективный размер строки таблицы в запросе получен путем применения логических условий, которые разрешены полностью на той таблице.

Но я правильно не понимаю это. Если существует m строки в таблице t1 и n строки в таблице t2, не был бы sql механизм проходить m x n строки в обоих случаях?

Обновление: Спасибо за все ответы. Я не буду переопределять оптимизатор, просто требуемый для подтверждения моей мысли.

7
задан Jeffrey Kemp 20 October 2010 в 12:01
поделиться