sql join语句中表的顺序是否有意义

sql join语句中表的顺序是否有意义,sql,database,oracle,Sql,Database,Oracle,sql join语句中表的顺序是否有意义。比如说 SELECT dept_name, emp_name FROM Employee INNER JOIN Department ON Employee.dept_id = Department.dept_id 及 按照表格的顺序是否有性能优势?没有 大多数(如果不是全部)DBMS使用基于成本的优化器。指定语句的顺序不会影响执行速度 Oracle基于成本的SQL optimizer(CBO)是一个非常复杂的工具 Oracle的一个组件,用

sql join语句中表的顺序是否有意义。比如说

SELECT dept_name, emp_name 
FROM   Employee 
INNER JOIN Department ON Employee.dept_id = Department.dept_id

按照表格的顺序是否有性能优势?

没有

大多数(如果不是全部)DBMS使用基于成本的优化器。指定语句的顺序不会影响执行速度

Oracle基于成本的SQL optimizer(CBO)是一个非常复杂的工具 Oracle的一个组件,用于管理每个Oracle查询的执行。 国会预算办公室已经发展成为世界上最复杂的机构之一 软件组件,并且它具有评估任何 SQL语句,并为 声明


这两条语句将生成相同的执行计划,因此具有相同的性能特征。请注意,成本将基于可用的统计数据。更新的统计信息对于优化器能够生成最有效的执行计划非常重要。

否。优化器会找出最佳连接路径,或者至少找出它认为的最佳连接路径。在不寻常的情况下,有时它并没有它所需要的所有信息,但99%的时间它都会得到正确的信息。它还将以其他方式在内部重写SQL语句。

优化器将检查所有可能的连接顺序排列,并选择成本值最低的一种。这意味着优化自身准备语句成为复杂语句的瓶颈。要连接的表越多,从数学上讲要检查的执行计划变量就越多:n!(阶乘)


资料来源:

正如其他安沃斯人所说,没有。

但请考虑是否可以用左连接替换一些内部连接。在大多数查询中,这在性能上是有益的

一般来说,没有关系。优化器应该能够找出连接表的最有效顺序,而不管它们在查询中出现的顺序如何


但是,表的顺序可能会影响查询计划。如果您有一个简单的两表联接,通常不会出现这种情况,但是随着查询中表数的增加,可能的联接数以O(n!)的速度增长。很快,优化器就不可能考虑所有可能的连接顺序,因此必须使用各种启发式算法来修剪树。这反过来会导致优化器在SQL语句中首先列出另一个驱动表时选择另一个驱动表,而不是在该表是查询中的第十个表时选择另一个驱动表。乔纳森·刘易斯(Jonathan Lewis)有一篇很好的博客文章,展示了如何做到这一点。如果你想格外小心,首先列出驾驶台是一件合理的事情——它不会经常起作用,但偶尔也会起到一些作用。

事实上,这是一种倒退。内部联接的性能通常优于外部联接。+1。我想补充(只是吹毛求疵)这两条语句应该生成相同的执行计划,其他所有内容都是相同的(即,几乎同时解析,使用相同的表统计信息,等等)。在某些情况下(不在本问题的范围内),这两个问题可能会给出不同的计划。+1我想在回答中提及这一点,但我不能像你那样简单地解释清楚,而且出于大多数目的,我刚刚遇到了这样一种情况:我有一张150万行的桌子,与其他4张各有5万行的桌子连接在一起。连接顺序对查询有明显的影响,在某些顺序中查询时间大于30秒,在其他顺序中约为0.01秒。
SELECT dept_name, emp_name 
FROM Department 
INNER JOIN Employee  ON Employee.dept_id = Department.dept_id