本文主要是介绍烦请解释一下“驱动表”的概念,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
rule 下所谓驱动表
还有 nested loops and hash join 之份我们以 nested loop 为例:
如果两个表连接字段都没有索引(通常这个时候是 sort merge / hash join),则驱动表会选择后者
若两个表其中有一个有索引而另外一个没有索引,则驱动表是没有索引那一个,跟顺序无关
若两个表都有索引,则驱动表为 后面 那一个表
所以事实上,RULE下,只有在两个表都存在连接字段的索引的情况下才需要考虑顺序问题
也就是小表放在后面大表放在前面(当然到底哪个好这实际上还跟 符合条件的记录数、数据分布等因素相关!!!,所以应该以实际测试为准)
如果是 CBO 下则跟顺序无关
关键的
是明白执行计划而不在于记什么规则
举例,表连接返回一条记录
存在两个表,一个 10条记录 ,一个1000万条记录
若2表都存在连接字段索引,若以小表为驱动表,则
代价:
10* (通过索引在大表查询一条记录的代价)
若以大表为驱动表:
1000万 * (通过索引在小表中查询一条记录的代价)
通过索引获取一条记录,10rows的表,代价通常在 3 blocks
索引2块,表一块
而如果是1000万的表,索引可能达到4块表一块
这样一来参考上面的计算,你说哪个更好?很显然!
FROM: http://www.itpub.net/thread-144375-2-1.html
这篇关于烦请解释一下“驱动表”的概念的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!