powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Замена JOIN OR на аналог
4 сообщений из 4, страница 1 из 1
Замена JOIN OR на аналог
    #39373739
execa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!
Существует запрос (в укороченном виде):
Код: plsql
1.
2.
SELECT * FROM a.table t 
JOIN a.table_join tj ON tj .id= t.id OR tj .id = a.table_other.id


Хотелось бы переписать имеющийся JOIN на два, дающих аналогичный результат. Какая из таблиц меньше t или tj неизвестно.
Есть вариант с union, но посколько цельный запрос довольно не маленький, придется его еще увеличивать.
Может есть решение с ипользованием нескольких join, но чтобы не было OR (в производительности проседает очень сильно).
...
Рейтинг: 0 / 0
Замена JOIN OR на аналог
    #39373752
execa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Скорее даже такой запрос, чтобы было понятно, что загвоздка в том, что данные кроме joina будут использоваться в другихместах
Код: plsql
1.
2.
3.
SELECT t.field, count(tj.id) FROM a.table t 
JOIN a.table_join tj ON tj .id= t.id OR tj .id = a.table_other.id
JOIN a.inner_table it ON tj.foreign_id = it.id
...
Рейтинг: 0 / 0
Замена JOIN OR на аналог
    #39374198
Alexander Titkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
execa,

Сделайте два соединения с table_join по своим условиям, оберните в подзапрос и используйте дальше как угодно. Правда еще тот изврат, с OR хоть читабельно.
...
Рейтинг: 0 / 0
Замена JOIN OR на аналог
    #39374369
execa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexander Titkin, да, спасибо.

Другого варианта как сделать два подзапроса по условиям и склеить их через union all, я не нашел. Если есть or в условии, то планер не использует индексы, а в подзапросах использует, выигрыш получается колоссальный - в десятки раз.

Самое интересное, что по тестам, даже если выбирать почти все данные из таблиц (индекс бесполезен), то такой вариант все равно выигрывает в скорости, думаю за счет того, что я выдернул и отдал только параметры нужные в других местах, а это быстрее, чем склеивать целые таблицы.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Замена JOIN OR на аналог
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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