Posted on 2009-01-15 11:23
Neil's NoteBook 閱讀(106)
評論(0) 編輯 收藏
Driving Table(驅動表):
該表又稱為外層表(OUTER TABLE)。這個概念用于嵌套與HASH連接中。如果該row
source返回較多的行數據,則對所有的后續操作有負面影響。注意此處雖然翻譯為驅動表,但實際上翻譯為驅動行源(driving row
source)更為確切。一般說來,是應用查詢的限制條件后,返回較少行源的表作為驅動表,所以如果一個大表在WHERE條件有有限制條件(如等值限
制),則該大表作為驅動表也是合適的,所以并不是只有較小的表可以作為驅動表,正確說法應該為應用查詢的限制條件后,返回較少行源的表作為驅動表。在執行
計劃中,應該為靠上的那個row source
Probed Table(被探查表):
該表又稱為內層表(INNER
TABLE)。在我們從驅動表中得到具體一行的數據后,在該表中尋找符合連接條件的行。所以該表應當為大表(實際上應該為返回較大row
source的表)且相應的列上應該有索引。在我們后面的描述中,一般將該表稱為連接操作的row source
組合索引(concatenated index):
由多個列構成的索引,如create index idx_emp on emp(col1, col2, col3,
……),則我們稱idx_emp索引為組合索引。在組合索引中有一個重要的概念:引導列(leading
column),在上面的例子中,col1列為引導列。當我們進行查詢時可以使用”where col1 = ? ”,也可以使用”where
col1 = ? and col2 = ?”,這樣的限制條件都會使用索引,但是”where col2 = ?
”查詢就不會使用該索引。所以限制條件中包含先導列時,該限制條件才會使用該組合索引
Join表的幾種方式:
1.(Sort Merge Join (SMJ) )
a.首先:生成驅動表的結果集。然后排序
b.生成被探查表的結果集,然后排序。
c.然后兩個表進行連接。
2.(Nested Loops (NL) )
兩層循環,里邊的表循環一次,然后去外邊的表去查,得到結果行,然后放入結果集。
所以較小的表要做為內層的表,即驅動表
他還有另一個優點:可以返回已經連接的結果集,不必等到所有的結果集都返回,才返回結構。
3.(Hash Join)
較小的表用來構建 row sourcehash 和 tablebitmap。
外邊的表是用來被hash的,并與第一個表生成的hashtable 進行連接。
索引掃描的方式:
索引唯一掃描(index unique scan)
select empno,ename from emp where empno=10;
empno是主鍵或者是unique .
索引范圍掃描(index range scan)
empno>59
索引全掃描(index full scan)
select empno, ename from big_emp order by empno,ename
是排著序的。
索引快速掃描(index fast full scan
select empno,ename from big_emp; 不排序。
原文地址:
http://weiruan85.javaeye.com/blog/288374