СН почитать (не asof, а любых hash join)? Грузит ли все ядра при джойне двух больших таблиц (или подзапросов)?
Понимает ли, что при совпадающих партиционных ключах в условии, можно попартиционно джойнить, а не все на все?
нигде, можно у автора спросить @chertus
Вот только что наткнулся на то, что два inner joinа не все ядра задействуют
в двух словах. hash join хорошо ложится на пайплайн CH поэтому в части join-а там все параллелится примерно так же хорошо, как для обычных запросов. в части построения хэш-таблицы - можно улучшить, если сделать лок-фри хэш таблицу (сейчас там mutex на вставке). merge join-ы вписываются в пайплайн сильно хуже, но там можно и нужно прокинуть инфу о сортировке из таблиц (и возможно где-то начнет обгонять hash join, когда умещаемся в память - не сильно приоритетно), join на диске вписывается очень плохо и сильно тормозит. сейчас join на диске есть только для merge join-а. в этом месте планируется сделать grace hash join (это двухуровневый hash join со скидыванием бакетов на диск) - должно работать сильно лучше текущего join-а на диске. На многопоточность это все почти никак не влияет. Основная проблема join-а на диске не гонять данные с диска в память и обратно (и не блокироваться на ожидании этих данных). помимо этого есть еще несколько оптимизаций про join-ы вообще, независимо от алгоритма. Там тоже не про многопоточность, а про использование доп знаний из индекса таблицы.
Обсуждают сегодня