資源描述:
《ORACLE執(zhí)行計劃的一些基本概念》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在工程資料-天天文庫。
1、ORACLE執(zhí)行計劃的一些基本概念本文介紹了ORACLE執(zhí)行計劃的一些基本概念,供學習應用。一?相關的概念R0WID的概念:R0WID是一個偽列,既然是偽列,那么這個列就不是用戶定義,而是系統(tǒng)自己給加上的。對每個表都冇一個ROWTD的偽列,但是表中并不物理存儲ROWID列的值。不過你能夠像使用其它列那樣使用它,但是不能刪除改列,也不能對該列的值進行修改、插入。一旦一行數(shù)據(jù)插入數(shù)據(jù)庫,則R0W1D在該行的生命周期內(nèi)是唯一的,即即使該行產(chǎn)生行遷移,行的R0WID也不會改動。RECURSIVESQL概念:有吋為了
2、執(zhí)行用戶發(fā)出的一個SQL語句,ORACLE必須執(zhí)行一些額外的語句,我們將這些額外的語句稱之為’RECURSIVECAI丄S'或?RECURSIVESQLSTATEMENTS'。如當一個DDL語句發(fā)出后,ORACLE總是隱含的發(fā)出一些RECURSIVESQL語句,來修改數(shù)據(jù)字典信息,以便用戶能夠成功的執(zhí)行該DDL語句。當需要的數(shù)據(jù)字典信息沒有在共享內(nèi)存中時,經(jīng)常會發(fā)生RECURSIVECALLS,這些RECURSIVECALLS會將數(shù)據(jù)字典信息從硬盤讀入內(nèi)存屮。用戶不比關心這些RECURSIVESQL語句的執(zhí)
3、行情況,在需要的時候,ORACLE會自動的在內(nèi)部執(zhí)行這些語句。當然DML語句與SELECT都可能引起RECURSIVESQL。簡單的說,我們能夠將觸發(fā)器視為RECURSIVESQLoROWSOURCE(行源):用在查詢中,由上一操作返冋的符合條件的行的集合,即能夠是農(nóng)的全部行數(shù)據(jù)的集合;也能夠是表的部分行數(shù)據(jù)的集合;也能夠為對上2個ROWSOURCE進行連接操作(如JOIN連接)后得到的行數(shù)據(jù)集合。PREDICATE(謂詞):一個杳詢中的WHERE限制條件DRIVINGTABLE(驅動表):該表又稱為外層表
4、(OUTERTABLE)o這個概念用于嵌套與HASH連接中。如果該ROWSOURCE返冋較多的行數(shù)拯,則對所有的后續(xù)操作有反面影響。注意此處雖然翻譯為驅動表,但實際上翻譯為驅動行源(DRIVINGROWSOURCE)更為確實。一般說來,是應用查詢的限制條件后,返回較少行源的表作為驅動表,所以如果一個大表在WHERE條件有有限制條件(如等值限制),則該大表作為驅動表也是合適的,所以并不是只冇較小的表能夠作為驅動表,正確說法應該為應用查詢的限制條件后,返冋較少行源的表作為駆動表。在執(zhí)行計劃屮,應該為靠上的那個R
5、OWSOURCE,后面會給出具體說明。在我們后面的描述中,一般將該表稱為連接操作的ROWSOURCEloPROBEDTABLE(被探查表):該表又稱為內(nèi)層表(INNERTABLE)o在我們從驅動表屮得到具休一行的數(shù)據(jù)后,在該表屮尋找符合連接條件的行。所以該表應當為大表(實際上應該為返冋較大ROWSOURCE的表)且相應的列上應該有索引。在我們后面的描述中,一般將該表稱為連接操作的ROWSOURCE2。組合索引(CONCATENATEDINDEX):由多個列構成的索引,如CREATEINDEXTDX_EMPO
6、NEMP(COL1,C0L2,COL3,……),則我們稱IDX_EMP索引為組合索引。在合索引中有一個重要的概念:指導列(LEADINGCOLUMN),在上面的例子中,COL1列為指導列。當我們進行査詢時能夠使用”WHEREC0L1二?”,也能夠使用"WHEREC0L1=?ANDC0L2二?”,這樣的限制條件都會使用索引,但是”WHEREC0L2=?”查詢就不會使用該索引。所以限制條件中包含先導列時,該限制條件才會使用該組合索引。叮選擇性(SELECTIVITY):比較一下列中唯一鍵的數(shù)量和表中的行數(shù),就能
7、夠判斷該列的可選擇性。如果該列的”唯一鍵的數(shù)量/表屮的行數(shù)”的比值越接近1,則該列的可選擇性越高,該列就越適合創(chuàng)建索引,同樣索引的可選擇性也越高。在可選擇性高的列上進行查詢時,返回的數(shù)據(jù)就較少,比較適合使用索引查詢。二.ORACLE訪問數(shù)據(jù)的存取方法1)全表掃描(FULLTABLESCANS,FTS)為完成全表掃描,ORACLE讀取表中所有的行,并檢查每一行是否滿足語句的WHERE限制條件一個多塊讀操作能夠使一次I/O能讀取多塊數(shù)據(jù)塊(DB_BLOCK_MULTIBLOCK_READ_COUNT參數(shù)設定),
8、而不是只讀取一-個數(shù)據(jù)塊,這極夭的減少了I/O總次數(shù),提高了系統(tǒng)的吞吐量,所以利用多塊讀的方法能夠十分高效地完成全表掃描,而且只有在全表掃描的情況卜?才能使用多塊讀操作。在這種訪問模式下,每個數(shù)據(jù)塊只被讀一次。使用FTS的前提條件:在較大的表上不建議使用全表掃描,除非取出數(shù)據(jù)的比較多,超越總量的5%―10%,或你想使用并行查詢功能時。使用全表掃描的例子:SQL〉EXPLAINPLANFORSELECT*FROMD