如果我们换一下,将select a.*换成select *, 看看成本

这里hash连接是最优的算法
执行结果:
(10468 行受影响) 表’workflowbase1’。扫描计数3,逻辑读取1571 次,物理读取0 次,预读0 次,lob 逻辑读取0 次,lob 物理读取0 次,lob 预读0 次。 表’workflowinfo1’。扫描计数3,逻辑读取9604 次,物理读取0 次,预读0 次,lob 逻辑读取0 次,lob 物理读取0 次,lob 预读0 次。 (10468 行受影响)y 表’Worktable’。扫描计数0,逻辑读取0 次,物理读取0 次,预读0 次,lob 逻辑读取0 次,lob 物理读取0 次,lob 预读0 次。 表’workflowinfo1’。扫描计数1,逻辑读取9604 次,物理读取0 次,预读0 次,lob 逻辑读取0 次,lob 物理读取0 次,lob 预读0 次。 表’workflowbase1’。扫描计数1,逻辑读取1571 次,物理读取0 次,预读0 次,lob 逻辑读取0 次,lob 物理读取0 次,lob 预读0 次。 |
这里的hash和merge的io次数一样,但merge连接里多了一个排序操作,占到整个成本的60&,的确验证了上面的一句话:
合并联接本身的速度很快,但如果需要排序操作,选择合并联接就会非常费时。
两个联接输入并不小但已在二者联接列上排序,则合并联接是最快的联接操作。如果没有排序hash连接是最优的操作。
注意:这里的排序指两个输入集合必须按相等列进行分别排序。而不是按其他列排序。
原文出处:http://database.ctocio.com.cn/tips/152/8276652_2.shtml