MySQL Embedded SELECT против JOINs - PullRequest
       10

MySQL Embedded SELECT против JOINs

4 голосов
/ 25 января 2010

Есть ли заметная разница между:

SELECT userid, username, userdept,
    (SELECT deptname FROM depts WHERE deptid=userdept) AS deptname
    FROM users

и

SELECT userid, username FROM users
    INNER JOIN depts ON depts.deptid=users.userdept

Какой из них лучше?

Ответы [ 4 ]

2 голосов
/ 25 января 2010

Ваш второй запрос имеет лучшую производительность.

Вы можете увидеть этот пример: http://www.codersrevolution.com/index.cfm/2008/7/31/MySQL-performance-INNER-JOIN-vs-subselect

1 голос
/ 25 января 2010

Эти два запроса не являются синонимами.

Они будут синонимами, если вы замените INNER JOIN на LEFT JOIN, за исключением того, что подзапрос подвержен сбою, если deptid не является уникальным, тогда как LEFT JOIN всегда будет успешным.

Если на depts.deptid имеется индекс UNIQUE (что, скорее всего, так как это поле, скорее всего, PRIMARY KEY), то разница в производительности будет незначительной.

1 голос
/ 25 января 2010

Вы также можете увидеть обсуждение много в SO по этой теме.

1 голос
/ 25 января 2010

лучше присоединиться,

см. Эту ссылку: http://www.selikoff.net/2008/12/10/memo-avoid-nested-queries-in-mysql-at-all-costs/

...