2015-11-23 1 views
2

Мне сказали в интервью, что правильное соединение обычно быстрее, чем левое соединение.ЯВЛЯЕТСЯ ПРАВИЛЬНЫМ ОБЪЕДИНЕНИЕМ, в общем, быстрее, чем ЛЕВЫЙ ПРИСОЕДИНЯЙТЕСЬ?

Это правда?

+0

бывают случаи, когда конкретная модель данных приведет к тому, что левое соединение или правое соединение станут быстрее - если вы говорите, что во всех случаях они одинаковы, вы ошибаетесь - возможно, это то, к чему ведет интервьюер. – Hogan

ответ

4

Конечно, это зависит от СУБД, но в целом нет оснований для того, чтобы это было правдой. Правильное соединение можно легко переписать в левое соединение автоматически. Поэтому, если это правда, оптимизатор запросов, даже примитивный, мог бы сделать это преобразование.

Семантически, у вас нет выбора в любом случае по причинам правильности, поэтому вы не можете его выбрать.

Существует один случай, когда это, как правило, верно. Если у вас есть запрос хранилища данных в стиле, как это:

select aggregates... 
from Facts 
left join Dim1 on ... 
left join Dim2 on ... 
left join Dim3 on ... 
left join Dim4 on ... 
group by ... 

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

Конечно, все хорошие оптимизаторы запросов делают это для вас (по крайней мере, в базах данных, предназначенных для использования DW).

Смежные вопросы