我有一个关于最佳方法的问题。当数据的大小可变时,我不确定哪种方法最好。
考虑以下 3 个表:
员工
EMPLOYEE_ID,EMP_NAME
项目
PROJECT_ID,PROJ_NAME
EMP_PROJ(以上两个表中的多对多)
EMPLOYEE_ID、PROJECT_ID
问题:给定一个 EmployeeID,找到与该员工关联的所有项目的所有员工。
我以两种方式尝试过这个。无论使用什么大小的数据,这两种方法都只有几毫秒的不同。
SELECT EMP_NAME FROM EMPLOYEE
WHERE EMPLOYEE_ID IN (
SELECT EMPLOYEE_ID FROM EMP_PROJ
WHERE PROJECT_ID IN (
SELECT PROJECT_ID FROM EMP_PROJ p, EMPLOYEE e
WHERE p.EMPLOYEE_ID = E.EMPLOYEE_ID
AND E.EMPLOYEE_ID = 123)
Run Code Online (Sandbox Code Playgroud)
走
select c.EMP_NAME FROM
(SELECT PROJECT_ID FROM EMP_PROJ
WHERE EMPLOYEE_ID = 123) a
JOIN
EMP_PROJ b
ON a.PROJECT_ID = b.PROJECT_ID
JOIN
EMPLOYEE c
ON b.EMPLOYEE_ID = c.EMPLOYEE_ID
Run Code Online (Sandbox Code Playgroud)
截至目前,我预计每个员工和项目大约有 5000 名……但不知道存在什么样的多对多关系。你会推荐哪种方法?谢谢!
编辑:方法 1 的执行计划
"Hash …Run Code Online (Sandbox Code Playgroud)