Oracle SQL - Влияет ли порядок JOIN в предложении FROM на оптимизацию производительности? - PullRequest
0 голосов
/ 28 апреля 2020

Давно go Мне однажды говорили во время курса SQL, что порядок JOIN в предложении FROM запроса может повлиять на производительность запроса. Так, например, если бы у меня было следующее

SELECT * FROM 
TABLE_1 INNER JOIN --5000 rows
TABLE_2 ON TABLE_1.COL1=TABLE_2.COL1 INNER JOIN --200 rows
TABLE_3 ON TABLE_2.COL1=TABLE_3.COL1--50 rows
.....

Это должно быть переупорядочено следующим образом

SELECT * FROM 
TABLE_3 INNER JOIN --50 rows
TABLE_2 ON TABLE_2.COL1=TABLE_3.COL1 INNER JOIN --200 rows
TABLE_1 ON TABLE_1.COL1=TABLE_2.COL1 --5000 rows
.....

Таким образом, таблица ведущих / ведущих является наименьшим количеством строк первой (гипотетически). Я читал, что, если HINT не используется для форсирования заказа, оптимизатор на основе затрат в Oracle просто переставит JOIN так, как считает нужным.

Просто любопытно, имеет ли значение порядок JOIN без использования HINTS в выражении SQL?

Ответы [ 2 ]

1 голос
/ 28 апреля 2020

Точно, долгое время go было влияние, когда использовался RBO (оптимизатор на основе правил).

В современных Oracle выпусках CBO (оптимизатор на основе затрат) выбирает лучший план выполнения и выполняет эту задачу для вас dirty , поэтому - нет, вам не нужно переупорядочивать таблицы больше.

0 голосов
/ 28 апреля 2020

имеет значение порядок JOIN без использования HINTS в выражении SQL?

Нет. Это базовая c оптимизация для базы данных; оптимизатор решит, какая стратегия лучше всего подходит для объединения таблиц, независимо от того, в каком порядке они указаны в предложении from.

...