iam*_*esh 13 sql database oracle
在sql join语句中的表顺序是否有任何意义.例如
SELECT dept_name, emp_name
FROM Employee
INNER JOIN Department ON Employee.dept_id = Department.dept_id
Run Code Online (Sandbox Code Playgroud)
和
SELECT dept_name, emp_name
FROM Department
INNER JOIN Employee ON Employee.dept_id = Department.dept_id
Run Code Online (Sandbox Code Playgroud)
表的顺序是否有任何性能优势?
Lie*_*ers 14
不,没有.
大多数(如果不是全部)DBMS使用基于成本的优化器.指定语句的顺序不会影响执行速度.
Oracle基于成本的SQL优化器(CBO)是Oracle中极其复杂的组件,用于管理每个Oracle查询的执行.CBO已经发展成为世界上最复杂的软件组件之一,它在评估任何SQL语句和为语句生成"最佳"执行计划方面具有挑战性的工作.
您的两个语句都将生成相同的执行计划,因此具有相同的性能特征.请注意,费用将基于可用的统计信息.更新的统计信息对于优化器能够生成最有效的执行计划非常重要.
一般来说,没关系也没关系.优化器应该能够找出加入表的最有效顺序,而不管它们在查询中出现的顺序如何.
但是,表的顺序可能会影响查询计划.如果您有一个简单的两个表连接,但通常不会出现这种情况,但随着查询中表的数量的增加,可能的连接数会以O(n!)速率增长.很快,优化器就不可能考虑所有可能的连接顺序,因此它必须使用各种启发式来修剪树.反过来,这导致优化器选择不同的驱动表的情况,如果该表在SQL语句中首先列出,而不是该表是查询中的第10个表.Jonathan Lewis有一篇很好的博客文章,展示了订单表在查询中的显示方式如何影响查询计划.如果你想要格外小心,首先列出驾驶表是一件合理的事情 - 它不会经常发生,但它偶尔会有所帮助.
| 归档时间: |
|
| 查看次数: |
6237 次 |
| 最近记录: |