小编Jer*_*rry的帖子

连接查询中的表顺序

我在Oracle文档中找到了这一段

如果要选择每个部门的名称及其管理员的名称,可以使用以下两种方法之一编写查询.在下面的第一个示例中,提示/ ++有序++ /表示按照表中出现在FROM子句中的顺序进行连接,并尝试优化连接顺序.

SELECT /*+ordered*/ d.NAME, e.NAME
FROM DEPT d, EMP e WHERE d.MGR = e.SS#
Run Code Online (Sandbox Code Playgroud)

要么:

SELECT /*+ordered*/ d.NAME, e.NAME 
FROM EMP e, DEPT d WHERE d.MGR = e.SS# 
Run Code Online (Sandbox Code Playgroud)

假设有10个部门和1000个员工,并且每个查询中的内部表在连接列上都有一个索引.在第一个查询中,第一个表生成10个符合条件的行(在本例中为整个表).在第二个查询中,第一个表生成1000个符合条件的行.第一个查询将访问EMP表10次并扫描DEPT表一次.第二个查询将扫描EMP表一次,但将访问DEPT表1000次.因此,第一个查询将执行得更好.根据经验,表格应从最小有效数字行到最大有效行数排列.通过应用完全在该表上解析的逻辑条件,可以获得查询中表的有效行大小.

但我没有正确理解这一点.如果m表t1中有行和n表t2中的行,那么m x n在这两种情况下sql引擎都不会遍历行吗?

更新:感谢所有回复.我不会压倒优化器,只是想确认一下我的想法.

sql oracle join

7
推荐指数
1
解决办法
5829
查看次数

标签 统计

join ×1

oracle ×1

sql ×1