【发布时间】:2016-08-28 10:12:12
【问题描述】:
在执行具有多个连接的查询时,SQL 是否遵循任何优先级。
一个示例查询
SELECT emp.ename, emp.DEPTNO, emp.JOB, emp.SAL
FROM EMPLOYEE emp
INNER JOIN DEPARTMENT Dept On emp.DEPTNO = Dept.DEPTNO
INNER JOIN (
SELECT MAX(emp.sal) maxSal, emp.DEPTNO
FROM EMPLOYEE emp
GROUP BY emp.DEPTNO
) AS maxSalData
ON emp.DEPTNO = maxSalData.DEPTNO AND emp.SAL = maxSalData.maxSal
我的问题是想知道当存在多个连接时如何执行 SQL 查询。
【问题讨论】:
-
无论JOIN如何,优化器都会将行数最少的表放在最前面,以尽量减少访问的数据
-
@Mihai,具体产品。不要忘记索引等。
-
您问的是 SQL Server 还是 Oracle?不要标记未涉及的产品。
-
@jarlh 当然,还有统计问题等等。只是对一般问题的一般评论。
-
SQL 是一个基于集合的表达式,它被“编译”到其他代码中执行。此“编译”代码在 SQL Server 中称为“执行计划”,在 Oracle 中称为“解释计划”。 “编译”考虑了当前的统计数据(可能是最新的,也可能不是最新的)、索引、您的查询、参数和一大堆其他因素。它所做的确切细节很复杂,并且在 RDBMS 甚至版本之间有所不同。但简短的回答是;大多数优化者估计不同选项的成本,并找出估计成本最低的选项。包括重新排序您的连接。
标签: sql sql-server database oracle join