|
Замена JOIN OR на аналог
|
|||
---|---|---|---|
#18+
Доброго времени суток! Существует запрос (в укороченном виде): Код: plsql 1. 2.
Хотелось бы переписать имеющийся JOIN на два, дающих аналогичный результат. Какая из таблиц меньше t или tj неизвестно. Есть вариант с union, но посколько цельный запрос довольно не маленький, придется его еще увеличивать. Может есть решение с ипользованием нескольких join, но чтобы не было OR (в производительности проседает очень сильно). ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2016, 13:48 |
|
Замена JOIN OR на аналог
|
|||
---|---|---|---|
#18+
Скорее даже такой запрос, чтобы было понятно, что загвоздка в том, что данные кроме joina будут использоваться в другихместах Код: plsql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2016, 14:00 |
|
Замена JOIN OR на аналог
|
|||
---|---|---|---|
#18+
execa, Сделайте два соединения с table_join по своим условиям, оберните в подзапрос и используйте дальше как угодно. Правда еще тот изврат, с OR хоть читабельно. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2016, 20:46 |
|
Замена JOIN OR на аналог
|
|||
---|---|---|---|
#18+
Alexander Titkin, да, спасибо. Другого варианта как сделать два подзапроса по условиям и склеить их через union all, я не нашел. Если есть or в условии, то планер не использует индексы, а в подзапросах использует, выигрыш получается колоссальный - в десятки раз. Самое интересное, что по тестам, даже если выбирать почти все данные из таблиц (индекс бесполезен), то такой вариант все равно выигрывает в скорости, думаю за счет того, что я выдернул и отдал только параметры нужные в других местах, а это быстрее, чем склеивать целые таблицы. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2016, 14:29 |
|
|
start [/forum/topic.php?fid=53&fpage=80&tid=1996791]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
56ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
38ms |
get tp. blocked users: |
2ms |
others: | 334ms |
total: | 476ms |
0 / 0 |