2011-10-25 64 views
0

嘿傢伙所以有些原因我的表正在做索引快速全面掃描。表沒有做索引掃描

這裏是我的查詢

SELECT bo.bid,cu.cid 
FROM ass2master_booking bo, ass2master_customer cu 
WHERE bo.cid = cu.cid 
and rownum < 135000; 

這裏是跟蹤文件

SELECT bo.bid,cu.cid 
FROM ass2master_booking bo, ass2master_customer cu 
WHERE bo.cid = cu.cid 
and rownum < 135000 


call  count  cpu elapsed  disk  query current  rows 
------- ------ -------- ---------- ---------- ---------- ---------- ---------- 
Parse  1  0.00  0.00   0   0   0   0 
Execute  2  0.00  0.00   0   0   0   0 
Fetch  9001  0.19  0.41  387  2131   0  134999 
------- ------ -------- ---------- ---------- ---------- ---------- ---------- 
total  9004  0.19  0.41  387  2131   0  134999 

Misses in library cache during parse: 0 
Optimizer mode: ALL_ROWS 
Parsing user id: 5594 

Rows  Row Source Operation 
------- --------------------------------------------------- 
134999 COUNT STOPKEY (cr=2131 pr=387 pw=189 time=411804 us) 
134999 HASH JOIN (cr=2131 pr=387 pw=189 time=276737 us) 
150000 INDEX FAST FULL SCAN CUSTOMER_CID_IDX (cr=320 pr=315 pw=0 time=263 us)(object id 332052) 
7412 TABLE ACCESS FULL ASS2MASTER_BOOKING (cr=1811 pr=44 pw=0 time=7566 us) 

基本上我被告知要添加結構unstructred數據我得到2臺15萬行和determ的其中以下結構是最好的。

  • 非聚集索引
  • 聚集索引
  • 散列羣集
  • 非結構化數據。

而我選擇用來做測試的查詢如上。

回答

1

您正在選擇兩個表的很大一部分,因此索引訪問沒有意義。 (至少甲骨文認爲)

它使用索引快速全面掃描,而不是表訪問完整,因爲它找到索引中所需的一切(cu.cid),並不需要該表。

我不知道你的意思與

非聚集索引聚集索引散列聚集非結構化數據。

更新:

我覺得一個經驗法則我使用:

如果你需要一個表的更多的則20%我期待有一個全表掃描。 如果你需要少於5%的表,我希望有某種索引訪問。

我在調整SQL語句時首先要做的事情之一是查看執行計劃並檢查oracle希望從每個步驟返回的行數。如果這些數字完全錯誤,執行計劃可能非常糟糕。

+0

嗨jens,何時應該使用索引?當你在特定的表中選擇特定的值時?比如customername ='tom'? – paktrick