巢狀迴圈成本消耗

shuangoracle發表於2012-06-10
這裡只考慮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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章