ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 嵌套循环成本消耗

嵌套循环成本消耗

原创 Linux操作系统 作者:shuangoracle 时间:2012-06-10 22:30:39 0 删除 编辑
这里只考虑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/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2010-08-25

  • 博文量
    84
  • 访问量
    206943