Как стать автором
Обновить

Комментарии 2

Здесь опять прошу помощи гуру. Объясните, почему при LEFT JOIN и достаточном work_mem, использование Merge Left Join более затратно, чем Hash Left Join?

Hash Left Join отлично работает, если с одной из сторон JOIN выбирается небольшой кусок данных (помещается в work_mem), поскольку можно построить хэш-таблицу и пробежатся по ней при мердже данных. Единственная цель хэш-таблицы является деятельность в качестве временной структуры в памяти, чтобы избежать чтения одной из таблиц множество раз во время JOIN операции :)

Merge Left Join просто собирает отсортированные списки в один. При этом оба списка должны быть отсортированы по предикатам объединения (в вашем случае по foo.c1 и bar.c1). Поэтому так важны индексы на эти поля :)

Ну а кто будет эффективнее — я думаю и так понятно :)
Прошу разбирающихся в теме разъяснить различия между external merge и external sort.


Вопрос поставлен не совсем корректно. Merge — это тип сортировки, т.н. «сортировка слиянием». Аналогично тому, как может быть «quick sort» — быстрая сортировка, в основе которой алгоритм Хоара.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории