巢狀迴圈成本消耗
這裡只考慮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巢狀
- python怎麼迴圈巢狀Python巢狀
- python 跳出巢狀迴圈方法Python巢狀
- Sql 巢狀迴圈最佳化案例SQL巢狀
- MySQL Join原理分析(緩衝塊巢狀與索引巢狀迴圈)MySql巢狀索引
- python 利用 for ... else 跳出雙層巢狀迴圈Python巢狀
- Python的if else 巢狀 和forin while 迴圈Python巢狀While
- 兩表連線一:巢狀迴圈連線巢狀
- Linux Shell程式設計(17)——巢狀迴圈Linux程式設計巢狀
- java中如何將巢狀迴圈效能提高500倍Java巢狀
- thinkphp中volist的多重迴圈,標籤巢狀PHP巢狀
- 瞭解巢狀迴圈聯接、合併聯接巢狀
- 最佳化兩個簡單的巢狀迴圈巢狀
- while + else 使用,while死迴圈與while的巢狀,for迴圈基本使用,range關鍵字,for的迴圈補充(break、continue、else) ,for迴圈的巢狀,基本資料型別及內建方法While巢狀資料型別
- 巢狀類遞迴巢狀遞迴
- 迴圈中巢狀非同步操作的流程控制巢狀非同步
- python基礎語法迴圈巢狀和列表(一)Python巢狀
- python基礎語法迴圈巢狀和列表(二)Python巢狀
- Oracle的表連線方法(二)巢狀迴圈連線Oracle巢狀
- 關於迴圈巢狀nested loops的一點分析巢狀OOP
- 高效遍歷匹配Json資料,避免巢狀迴圈[轉]JSON巢狀
- 碎片化學習Java(二十)Java for迴圈巢狀輸出指定圖案Java巢狀
- 記錄一次 postgresql 最佳化案例( 巢狀迴圈改HASH JOIN )SQL巢狀
- ThinkPHP學習(四)volist標籤高階應用之多重巢狀迴圈PHP巢狀
- 微信小程式入門教程--列表渲染多層巢狀迴圈及wx:key的使用微信小程式巢狀
- 與小卡特一起學python 第11章 巢狀與可變迴圈Python巢狀
- [work] python巢狀字典的遞迴遍歷Python巢狀遞迴
- 將if-else之類巢狀迴圈重構為函式式管道 - XP123巢狀函式
- 碎片化學習Java(二十一)Java for迴圈巢狀輸出三角形Java巢狀
- JavaScript的map迴圈、forEach迴圈、filter迴圈、reduce迴圈、reduceRight迴圈JavaScriptFilter
- 【TUNE_ORACLE】列出返回行數較多的巢狀迴圈(NESTED LOOPS)SQL的SQL參考Oracle巢狀OOPSQL
- 遞迴元件組合拳,無懼頁面巢狀遞迴元件巢狀
- less巢狀巢狀
- Datalist巢狀巢狀
- 微課sql最佳化(14)、表的連線方法(3)-關於Nested Loops Join(巢狀迴圈)SQLOOP巢狀
- 1kb的前端HTML模板解析引擎,不限於巢狀、迴圈、函式你能想到的解析方式前端HTML巢狀函式
- C語言——迴圈結構(for迴圈,while迴圈,do-while迴圈)C語言While