Условие соединения SQL A = B или обратное к B = A? - PullRequest
2 голосов
/ 15 мая 2009

Не думаю, что это имеет какое-либо значение для базы данных, но при объединении таблиц, в каком порядке вы предпочитаете написать условие:

SELECT
    ...
    FROM AAA
        INNER JOIN BBB ON AAA.ID=BBB.ID
    WHERE ...

OR

SELECT
    ...
    FROM AAA
        INNER JOIN BBB ON BBB.ID=AAA.ID
    WHERE ...

Ответы [ 13 ]

0 голосов
/ 15 мая 2009

Не может ли это повлиять на производительность в зависимости от того, как две таблицы индексируются и в какое поле они объединяются?

Оптимизатор запросов в некоторых механизмах БД мог бы делать правильные вещи, независимо от того, какой порядок вы указали, но только некоторое время с планом запроса и тестированием наверняка ответит.

0 голосов
/ 15 мая 2009

Давайте вспомним, что LINQ - это не SQL , так почему это даже упоминается здесь? На вопросы SQL НЕ следует отвечать с помощью ответов LINQ. Это просто странно и не имеет никакого отношения к моему мнению !!

Оба примера приемлемы. Я предпочитаю второй пример, как большинство разработчиков SQL. Это также зависит от типа SQL JOIN, который вы хотите использовать. Заголовок вопроса просто для "JOIN", но в вашем примере используется INNER JOIN.

В данном случае для ВНУТРЕННЕГО СОЕДИНЕНИЯ это не имеет значения. Но имейте в виду, что оба примера приведут к HASH MATCHED JOIN, что не идеально для работы с индексами. Loop Join гораздо эффективнее. Просто убедитесь, что вы рассматриваете свои индексы, так как хеш-соединения являются индикатором неэффективной индексации.

0 голосов
/ 15 мая 2009

Неважно, в каком порядке вы записываете соединение, если таблицы, на которые вы ссылаетесь, уже были упомянуты в запросе.

Лично я предпочитаю перечислять самые последние таблицы вторыми (вариант 1). Это соглашение помогает, потому что я решил всегда использовать левое внешнее соединение при необходимости (а не правое внешнее соединение), и мне не нужно думать о том, какая таблица будет справа или слева.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...