这里只考虑io消耗:
全表扫描:一次多块读时间和多块读次数;多块读次数由总块数与一次多块读的块数决定
单表全表扫描成本:多块读次数*一次多块读时间/单块读时间=(总块数/一次多块读块数) * 一次多块读时间/单块读时间
嵌套循环都是全表扫描的话:第一个表全表扫描成本+第一个表返回行数*第二个表执行一次的成本
索引扫描:索引高度,表选择性,索引选择性,聚簇因子,叶子块数决定
单表访问索引扫描成本=blevel+(叶子块数*表选择性)+ceil(聚簇因子*索引选择性)
那么嵌套循环时:
访问索引的成本 —— blevel + avg_leaf_blocks_per_key - 1
访问表的成本 —— 表所在行的增量成本是 avg_data_block_per_key
在新机制中,首先在外部表中找到第一行,然后遍历索引,但停止在叶子块上,只为内部表选取相关的rowid;接下来处理外部表的第二、第三行等等重复
上述过程。当找到全部的rowid之后,对其进行排序,然后只对内部表按顺序访问一遍,按其rowid的顺序取出相应的行。
所以,对于这种嵌套循环,每次访问内部表只是对索引块的访问,最后对表按rowid去扫描一次外部表。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24496749/viewspace-732419/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/24496749/viewspace-732419/