Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
убрать ненужную сортировку после FULL OUTER JOIN
|
|||
|---|---|---|---|
|
#18+
Для постраничного показа хочу использовать ORDER BY, не принципиально в каком порядке, и LIMIT, OFFSET. При этом выборка идет по FULL OUTER JOIN двух таблиц по полю id. Насколько я понимаю, выдача Merge Full Join отсортирована по "общему id", и если указать ORDER BY по этому же "общему id", то в плане запроса Sort должен оказаться не нужным. Однако не получается. Что делать? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2008, 15:00 |
|
||
|
убрать ненужную сортировку после FULL OUTER JOIN
|
|||
|---|---|---|---|
|
#18+
Merge join предполагает и требует на входе слияния уже отсортированные наборы. поэтому ИМХО никак не убрать. Или перейти на более медленный join. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2008, 11:09 |
|
||
|
убрать ненужную сортировку после FULL OUTER JOIN
|
|||
|---|---|---|---|
|
#18+
WWMerge join предполагает и требует на входе слияния уже отсортированные наборы. поэтому ИМХО никак не убрать. Или перейти на более медленный join.на вход и так приходят упорядоченные наборы, по Index Scan, с этим проблем нет. проблема с выходом джоина: постгрес не понимает, что выход Merge Full Join упорядочен по "общему id", поэтому проводит сортировку выхода, хотя имхо можно обойтись без нее. нарыл в сорцах :-( src/backend/optimizer/path/pathkeys.c * EXCEPTION: in a FULL or RIGHT join, we cannot treat the result as * having the outer path's path keys, because null lefthand rows may be * inserted at random points. It must be treated as unsorted. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2008, 12:16 |
|
||
|
убрать ненужную сортировку после FULL OUTER JOIN
|
|||
|---|---|---|---|
|
#18+
LeXa NalBat WWMerge join предполагает и требует на входе слияния уже отсортированные наборы. поэтому ИМХО никак не убрать. Или перейти на более медленный join.на вход и так приходят упорядоченные наборы, по Index Scan, с этим проблем нет. проблема с выходом джоина: постгрес не понимает, что выход Merge Full Join упорядочен по "общему id", поэтому проводит сортировку выхода, хотя имхо можно обойтись без нее. нарыл в сорцах :-( src/backend/optimizer/path/pathkeys.c * EXCEPTION: in a FULL or RIGHT join, we cannot treat the result as * having the outer path's path keys, because null lefthand rows may be * inserted at random points. It must be treated as unsorted.ну, поленились. а реализовать руками? (в ф-ии) кажется должно получится 2 вложенных FOR LOOP-а по индексно сортированным наборам. Нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2008, 16:54 |
|
||
|
убрать ненужную сортировку после FULL OUTER JOIN
|
|||
|---|---|---|---|
|
#18+
LeXa NalBat WWMerge join предполагает и требует на входе слияния уже отсортированные наборы. поэтому ИМХО никак не убрать. Или перейти на более медленный join.на вход и так приходят упорядоченные наборы, по Index Scan, с этим проблем нет. проблема с выходом джоина: постгрес не понимает, что выход Merge Full Join упорядочен по "общему id", поэтому проводит сортировку выхода, хотя имхо можно обойтись без нее. нарыл в сорцах :-( src/backend/optimizer/path/pathkeys.c * EXCEPTION: in a FULL or RIGHT join, we cannot treat the result as * having the outer path's path keys, because null lefthand rows may be * inserted at random points. It must be treated as unsorted. Это случайно не то, что Васм беспокоит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2008, 19:17 |
|
||
|
убрать ненужную сортировку после FULL OUTER JOIN
|
|||
|---|---|---|---|
|
#18+
4321ну, поленились. а реализовать руками? (в ф-ии) кажется должно получится 2 вложенных FOR LOOP-а по индексно сортированным наборам. Нет?не-е-ет. функцию писать моя очередь лениться. два вложенных FOR LOOP-а - это наверное получился бы аналог Nested Loop. а вот если открыть два курсора, бежать по ним поэлементно сравнивая значения, возвращая наружу меньшее, то это наверное получится Merge Join. но писать такую функцию, да еще и заморачиваться с limit, offset - лень. сейчас просто убрал из запроса ORDER BY. все работает ок, вот только если постгрес когда-нибудь научиться делать FULL JOIN иначе чем через Merge, сортировка может слететь. Andrey Daeron Это случайно не то, что Васм беспокоит.кажется, нет. если я правильно понимаю, они это уже реализовали, по крайней мере в ./src/backend/executor/nodeMergejoin.c я не заметил никакого "final merge", но наоборот в описании алгоритма есть работа с маркерами: "mark inner position", "restore inner position to mark". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2008, 13:21 |
|
||
|
убрать ненужную сортировку после FULL OUTER JOIN
|
|||
|---|---|---|---|
|
#18+
LeXa NalBatдва вложенных FOR LOOP-а - это наверное получился бы аналог Nested Loop.да я уж подумал было, что соврал слегка. внутренний цикл будет, если не ошибаюсь, всегда по наново открытой выборке. (т.к. вход (возврат) боковой в уже открытый FOR...LOOP ,кажется, не предусмотрен) LeXa NalBatа вот если открыть два курсора, бежать по ним поэлементно сравнивая значения, возвращая наружу меньшее, то это наверное получится Merge Join.да ,похоже. И, похоже, может не получиться быстро - про скорость бега вдоль курсоров тут по соседству не очень то радостно обсуждается. Хотя - надо пробовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2008, 13:36 |
|
||
|
убрать ненужную сортировку после FULL OUTER JOIN
|
|||
|---|---|---|---|
|
#18+
резюме такое :-( "it might be time to put in some more work, if we really care about improving this " http://archives.postgresql.org/pgsql-general/2008-02/msg01272.php ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2008, 13:44 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=35148382&tid=2004571]: |
0ms |
get settings: |
6ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
41ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
| others: | 218ms |
| total: | 356ms |

| 0 / 0 |
