Сравнение соединений MySQL: что быстрее, что правильно? - PullRequest
3 голосов
/ 05 августа 2011

Я недавно натолкнулся на этот кусок SQL:

SELECT members.id
FROM members, members_to_groups
WHERE members.id = members_to_groups.memberId
    AND members_to_groups.groupId = 1

Теперь я никогда бы не подумал о таком объединении, вместо этого используя внутреннее соединение:

SELECT members.id
FROM members
INNER JOIN members_to_groups ON members.id = members_to_groups.memberId
WHERE members_to_groups.groupId = 1

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

Ответы [ 3 ]

4 голосов
/ 05 августа 2011

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

Первый метод - это непереносимая «старая» версия sql, для больших запросов этоГораздо сложнее определить, что в вас есть предложение WHERE для объединения таблиц, а что - для фильтрации.

3 голосов
/ 05 августа 2011

Единственный способ узнать это - изучить план выполнения, но неявное и явное внутреннее объединение приводит к точно тому же плану выполнения, поэтому различий в производительности нет.Явное объединение намного более читабельно.

Кроме того, @gbn говорит, что неявные объединения недействительны семантически .:)

0 голосов
/ 23 августа 2011
WHERE members.id = members_to_groups.memberId => occurs at row level 

, тогда как

INNER JOIN members_to_groups ON members.id = members_to_groups.memberId => occurs at table level

Поскольку объединения происходят на уровне таблицы, а не на уровне строк, они быстрее

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