Left Deep дерево соединения в оптимизаторе запросов базы данных и параллелизма - PullRequest
2 голосов
/ 16 августа 2011

Я читал это в литературе, что левое глубокое дерево соединения менее благоприятно, чем правое глубокое дерево, с точки зрения параллелизма.Причина в следующем:

          X
         / \
        /   \
       X     r6
      / \
     /   \
    X    r5
  /  
 /     \
r0     r1

В этом дереве соединений, согласно литературным источникам, соединение хешем будет выполняться следующим образом,

1. HashTable on r0 and then probe using r1
2. HashTable on r0 X r1 then hash probe using r5
3. HashTable on r0 X r1 X r5 and hash probe using r6

Но более простой параллельный способ сделать этообъединение

1. HashTable on r1, r5, r6 independently
2. HashProbe r1 using r0, use result to hash probe r5 and then r6
   This can be nicely pipelined.

Почему это нельзя сделать таким образом?Я упускаю что-то очевидное?

Ссылка: http://docs.google.com/viewer?a=v&pid=explorer&chrome=true&srcid=1BBIHNuObz9vsFxaCtpKUeDg-Xif2kqRVnb0Mr_3IUah-RyTceFCANTq8drXW&hl=en_US (Перейти на страницу 18)

Я также читал аналогичную вещь в книге: http://www.amazon.com/Principles-Database-Processing-Applications-Management/dp/1558604340

1 Ответ

0 голосов
/ 17 августа 2011

Я думаю, я понял, как это работает, во всех местах, где я это читал, есть предположение, что операция HashBuild всегда будет происходить в левом отношении.Это объясняет, почему дерево соединений справа-глубоко будет иметь лучший план параллельного выполнения, чем дерево соединений слева-глубоко.

...