Гость
Map
Форумы / Oracle [игнор отключен] [закрыт для гостей] / JOIN на 7 таблиц / 11 сообщений из 11, страница 1 из 1
13.10.2021, 22:54
    #40104244
SergiiW
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JOIN на 7 таблиц
Добрый день всем!
Есть странности з запросом, может кто поможет прояснить ситуацию.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
Select ...
FROM T
JOIN T1 on T.t1=t1.id
JOIN T2 on T.t2=t2.id
JOIN T3 on t.t3=t3.id
JOIN T4 on t.t4=t4.id
JOIN T5 on t.t5=t5.id
JOIN T6 on t.t6=t6.id
JOIN T7 on t.t7=t7.id


Запрос выполняется за 14 секунд.
Если убрать любую(!) из таблиц T1-T7 то запрос выполняется за 90-120 мс.
План запросов практически одинаков, Cost отличается только на 1 (13048, 13049).
Если убранную таблицу добавить в SELECT, например,
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT ...,
 (SELECT t7.Name FROM T7 WHERE t.t7=t7.id) T7Name
FROM T
JOIN T1 on T.t1=t1.id
JOIN T2 on T.t2=t2.id
JOIN T3 on t.t3=t3.id
JOIN T4 on t.t4=t4.id
JOIN T5 on t.t5=t5.id
JOIN T6 on t.t6=t6.id
-- JOIN T7 on t.t7=t7.id

, то тоже выполняется быстро за 100 мс.
В Oracle есть какое-то ограничение по количеству связанных (JOIN) таблиц?
...
Рейтинг: 0 / 0
14.10.2021, 01:42
    #40104252
Alexander Anokhin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JOIN на 7 таблиц
SQL monitor report'ы смотрел?
...
Рейтинг: 0 / 0
14.10.2021, 01:59
    #40104253
ded-mazay
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JOIN на 7 таблиц
Заодно мож обьясните зачем делать столько джоинов, а не from T, T1,....T7 where T.t1 = t1.id and...T7 = t.t7 = t7.id, если вхождение обязательное? Да даже если вхождение не обязательное есть (+)
...
Рейтинг: 0 / 0
14.10.2021, 06:57
    #40104270
crutchmaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JOIN на 7 таблиц
SergiiW,

Попробуй хинты на порядок джоинов. Делай от меньших к большим.
...
Рейтинг: 0 / 0
14.10.2021, 08:09
    #40104277
SergiiW
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JOIN на 7 таблиц
Alexander Anokhin
SQL monitor report'ы смотрел?
Нет. Не умею этого делать. :(
...
Рейтинг: 0 / 0
14.10.2021, 08:11
    #40104278
SergiiW
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JOIN на 7 таблиц
crutchmaster

Попробуй хинты на порядок джоинов. Делай от меньших к большим.
К сожалению не понял, детальнее, пожалуйста.
...
Рейтинг: 0 / 0
14.10.2021, 08:55
    #40104291
SergiiW
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JOIN на 7 таблиц
Разобрался.
Oracle по разному строил порядок соединения таблиц. При добавлении 7 join он делал не оптимальный порядок.
Решается хинтами. Но, обнаружил, что при разных соединениях на одном и том же запросе он строит разные планы. Один оптимальный, другой нет. И это уже не первый раз. Почему план запроса может зависить от соединения?
...
Рейтинг: 0 / 0
14.10.2021, 10:29
    #40104316
Vadim Lejnin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JOIN на 7 таблиц
SergiiW,

Версия?

было много багов когда появился ANSI JOIN
...
Рейтинг: 0 / 0
14.10.2021, 10:39
    #40104323
SergiiW
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JOIN на 7 таблиц
Vadim Lejnin,
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
...
Рейтинг: 0 / 0
14.10.2021, 11:37
    #40104339
crutchmaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JOIN на 7 таблиц
SergiiW,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Select /*+leading(T T1 T2 T3 T4 T5 T6 T7)*/
...
FROM T
JOIN T1 on T.t1=t1.id
JOIN T2 on T.t2=t2.id
JOIN T3 on t.t3=t3.id
JOIN T4 on t.t4=t4.id
JOIN T5 on t.t5=t5.id
JOIN T6 on t.t6=t6.id
JOIN T7 on t.t7=t7.id     


Еще посмотрите метод соединения: use_nl (nested loops), use_hj (hash join) и index

SergiiW
Почему план запроса может зависить от соединения?

Потому что он работает через жопу, живёт своей жизнью и считает себя умнее всех. Собственно, так всегда происходит, когда ПО пытается быть умнее того, кто на нём пишет.
...
Рейтинг: 0 / 0
14.10.2021, 13:18
    #40104368
SergiiW
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JOIN на 7 таблиц
crutchmaster,

Спасибо!
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / JOIN на 7 таблиц / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]