MySQL Embedded выбирает по сравнениюПрисоединяется
-
22-09-2019 - |
Вопрос
Есть ли заметная разница между:
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
Какой из них лучше?
Решение
Ваш второй запрос имеет лучшую производительность.
Вы можете увидеть этот пример: http://www.codersrevolution.com/index.cfm/2008/7/31/MySQL-performance-INNER-JOIN-vs-subselect
Другие советы
присоединяйтесь лучше ,
смотрите эту ссылку :http://www.selikoff.net/2008/12/10/memo-avoid-nested-queries-in-mysql-at-all-costs/
вы можете видеть многие обсуждения в SO и по этой теме тоже.
Эти два запроса не являются синонимами.
Они были бы синонимами, если бы вы заменили INNER JOIN
с помощью LEFT JOIN
, за исключением того , что подзапрос может завершиться неудачей , если deptid
не является уникальным, в то время как LEFT JOIN
всегда добьется успеха.
Если есть UNIQUE
индекс на depts.deptid
(что, скорее всего, так и есть, поскольку это поле, скорее всего, является PRIMARY KEY
), тогда разница в производительности была бы незначительной.