真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

oraclehashjoin原理及注意事項(xiàng)有哪些

oracle hash join原理及注意事項(xiàng)有哪些,針對這個(gè)問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡單易行的方法。

創(chuàng)新互聯(lián)公司專注于企業(yè)網(wǎng)絡(luò)營銷推廣、網(wǎng)站重做改版、賈汪網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5建站、商城網(wǎng)站制作、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為賈汪等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

7.3引入,僅用于CBO和等值連接,隱含參數(shù)_hash_join_enabled默認(rèn)true,即使為false也可被use_hash覆蓋;
Oracle依據(jù)hash_area_size/db_block_size/_hash_multiblock_io_count決定hash partition數(shù)量,hash表由若干hash partition組成,而每個(gè)partition都包含多個(gè)hash bucket

表small和big,前者會(huì)被選為驅(qū)動(dòng)表,假定其結(jié)果集為s,后者為b;
構(gòu)造驅(qū)動(dòng)表
1 遍歷s,對其每條記錄按照連接列做hash運(yùn)算;使用2個(gè)hash函數(shù),暫稱為func_1/func_2,其hash值為value1和value2;
2 按照value1分配bucket,把s和value2存入其中;只需查詢列/連接列即可,不需要整行記錄;構(gòu)造hash partition時(shí)每個(gè)分區(qū)對應(yīng)1個(gè)bitmap,標(biāo)注該分區(qū)所屬bucket是否有記錄;
3 如果s > hash_area_size,將包含記錄最多的partition存入temp,反復(fù)直至完成;
4 按記錄數(shù)對hash partition排序,當(dāng)s > hash_area_size,則盡量將較小的partition保留內(nèi)存中;
構(gòu)造被驅(qū)動(dòng)表
5 遍歷b,處理方式與步驟1一樣;
6 按照value1匹配s的bucket,然后遍歷其所有記錄,并校驗(yàn)連接列是否相等;如果成功則返回記錄;如果沒有在內(nèi)存中找到bucket,首先訪問bitmap,若其記錄數(shù)>0,暫將b中對應(yīng)記錄寫入temp,若=0則直接跳過,即位圖過濾;反復(fù)直至完成所有位于內(nèi)存中的s和b的記錄;
7 處理temp中的si和bj,分區(qū)號相等的結(jié)成對sn/bn,記錄數(shù)較少的作驅(qū)動(dòng)表,以value2構(gòu)造hash table;反復(fù)直至完成


注意事項(xiàng)
1 驅(qū)動(dòng)表連接列的選擇性要高,若一個(gè)bucket的記錄數(shù)過多,遍歷時(shí)會(huì)嚴(yán)重消耗CPU且邏輯讀不高(位于PGA中),可參照http://www.dbafan.com/blog/?p=151
2 驅(qū)動(dòng)表應(yīng)盡可能小,最好可全部裝入內(nèi)存hash_area_size


10104事件
跟蹤hash join,記錄hash partition/bucket以及每個(gè)bucket多少條記錄


Hint
use_hash(table_1 table_2) 與 use_hash(table_1) + use_hash(table_2)等價(jià),即并不決定連接順序;
no_swap_join_inputs(rowsource_alias)和swap_join_inputs(rowsource_alias) 可指定驅(qū)動(dòng)表和被驅(qū)動(dòng)表,后者不可swap;

select  /*+ leading(table_1 table_2) use_hash(table_2) no_swap_join_inputs(table_2) */ *
from    t1 table_1, t2 table_2
where   table_1.n1 = table_1.n1;
-----------------------------------------------------------
| Id  | Operation          | Name | Rows  | Bytes | Cost  |
-----------------------------------------------------------
|   0 | SELECT STATEMENT   |      | 45000 |    16M|    44 |
|*  1 |  HASH JOIN         |      | 45000 |    16M|    44 |
|   2 |   TABLE ACCESS FULL| T1   |  3000 |   547K|    14 |
|   3 |   TABLE ACCESS FULL| T2   |  3000 |   547K|    14 |
-----------------------------------------------------------

select  /*+ leading(table_1 table_2) use_hash(table_2) swap_join_inputs(table_2) */ *
from    t1 table_1, t2 table_2
where   table_1.n1 = table_1.n1;

-----------------------------------------------------------
| Id  | Operation          | Name | Rows  | Bytes | Cost  |
-----------------------------------------------------------
|   0 | SELECT STATEMENT   |      | 45000 |    16M|    44 |
|*  1 |  HASH JOIN         |      | 45000 |    16M|    44 |
|   2 |   TABLE ACCESS FULL| T2   |  3000 |   547K|    14 |
|   3 |   TABLE ACCESS FULL| T1   |  3000 |   547K|    14 |
-----------------------------------------------------------

關(guān)于oracle hash join原理及注意事項(xiàng)有哪些問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。


分享題目:oraclehashjoin原理及注意事項(xiàng)有哪些
文章源于:http://weahome.cn/article/pcsjpd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部