Производительность между подзапросом и присоединением? - PullRequest
0 голосов
/ 20 сентября 2011
Both queries generates a list of department IDs along with the number
of employees assigned to each department. 

Я могу получить результаты выше как с помощью объединений, так и подзапросов, но я очень хочу знать, как оба запроса работают в терминах performance, что лучше: соединения или подзапрос. Я добавил снимок экрана «Объяснить план» для обоих запросов, но не понимаю, что это значит.

Использование Join

SELECT d.dept_id, d.name, count(emp_id) AS num_employee
FROM department d INNER JOIN employee e ON e.dept_id = d.dept_id
GROUP BY dept_id;

enter image description here

Использование подзапроса

SELECT d.dept_id, d.name, e_cnt.how_many num_employees
FROM department d INNER JOIN
(SELECT dept_id, COUNT(*) how_many
FROM employee
GROUP BY dept_id) e_cnt
ON d.dept_id = e_cnt.dept_id;

enter image description here

1 Ответ

4 голосов
/ 20 сентября 2011

Объединение явно лучше, как вы можете видеть в своем плане выполнения.: P

Подвыбор использует индекс для получения начальной таблицы (count (*), dept_id), а затем использует буферную таблицу для соединения с внешним оператором select, чтобы получить ваш результат.

Внутреннее объединение использует индекс как для отдела, так и для сотрудника, чтобы определить совпадающие строки, сохраняя себя при создании таблицы буферов и начальном поиске по индексу.

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