巢狀迴圈成本消耗
這裡只考慮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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- python怎麼迴圈巢狀Python巢狀
- MySQL Join原理分析(緩衝塊巢狀與索引巢狀迴圈)MySql巢狀索引
- Python的if else 巢狀 和forin while 迴圈Python巢狀While
- python 利用 for ... else 跳出雙層巢狀迴圈Python巢狀
- 最佳化兩個簡單的巢狀迴圈巢狀
- python基礎語法迴圈巢狀和列表(一)Python巢狀
- python基礎語法迴圈巢狀和列表(二)Python巢狀
- java中如何將巢狀迴圈效能提高500倍Java巢狀
- while + else 使用,while死迴圈與while的巢狀,for迴圈基本使用,range關鍵字,for的迴圈補充(break、continue、else) ,for迴圈的巢狀,基本資料型別及內建方法While巢狀資料型別
- 巢狀類遞迴巢狀遞迴
- 高效遍歷匹配Json資料,避免巢狀迴圈[轉]JSON巢狀
- 迴圈中巢狀非同步操作的流程控制巢狀非同步
- 碎片化學習Java(二十)Java for迴圈巢狀輸出指定圖案Java巢狀
- 記錄一次 postgresql 最佳化案例( 巢狀迴圈改HASH JOIN )SQL巢狀
- 將if-else之類巢狀迴圈重構為函式式管道 - XP123巢狀函式
- [work] python巢狀字典的遞迴遍歷Python巢狀遞迴
- 碎片化學習Java(二十一)Java for迴圈巢狀輸出三角形Java巢狀
- 【TUNE_ORACLE】列出返回行數較多的巢狀迴圈(NESTED LOOPS)SQL的SQL參考Oracle巢狀OOPSQL
- 遞迴元件組合拳,無懼頁面巢狀遞迴元件巢狀
- 微課sql最佳化(14)、表的連線方法(3)-關於Nested Loops Join(巢狀迴圈)SQLOOP巢狀
- 1kb的前端HTML模板解析引擎,不限於巢狀、迴圈、函式你能想到的解析方式前端HTML巢狀函式
- 列表巢狀操作巢狀
- vue路由巢狀Vue路由巢狀
- for 迴圈與 while 迴圈While
- while迴圈 case迴圈While
- C語言——迴圈結構(for迴圈,while迴圈,do-while迴圈)C語言While
- 無限for迴圈(死迴圈)
- SCSS 巢狀屬性CSS巢狀
- SCSS 巢狀規則CSS巢狀
- 展開巢狀列表巢狀
- Locust 任務巢狀巢狀
- Oracle 巢狀表(轉)Oracle巢狀
- vue(19)巢狀路由Vue巢狀路由
- 巢狀子查詢巢狀
- Blazor巢狀傳遞Blazor巢狀
- Ubuntu出現一直登入介面迴圈狀況Ubuntu
- while迴圈以及do while迴圈While
- 《零基礎看得懂的C語言入門教程 》——(九)C語言二維陣列與迴圈巢狀C語言陣列巢狀
- 使用C++和Qt框架編寫的示例程式碼,用於解釋上述關於進入新事件迴圈、巢狀事件迴圈與延遲刪除相關的內容C++QT框架事件巢狀