2017-05-05 63 views
0

我有一個表客戶,其字段爲customer_id,customer_fname,customer_lname,customer_address。客戶Oracle索引訪問行爲

CREATE INDEX cust_index 
ON customer (UPPER(customer_id)); 

我使用的查詢

我已經創建的索引cust_index作爲

select * from customer where customer_id=? and customer_fname=? 

我想知道的是cust_index會在我的選擇查詢中使用?

+0

對於這個查詢no'select * from customer where customer_id =?' 對於這個是的'select * from customer where where(customer_id)=?' 但是這取決於很多因素。 –

+0

感謝Arkadiusz的回覆。 – user3090158

+0

Arkadiusz你有想法如何檢查特定查詢是否使用任何索引或不? – user3090158

回答

1

你必須谷歌的「基於Oracle成本的優化」,並解釋計劃。

explain plan for your_query_here 
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY); 

這將顯示hipotethical查詢。

或運行查詢和

SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR) 

它會顯示一個光標/查詢真正的計劃。

如果oracle've選擇光標訪問數據的解釋計劃似乎只用"INDEX somthing SCAN index_name "

2

函數的索引如果where子句中的簽名完全配襯指數的簽名。如果你請求編譯的索引體,你會發現它編譯成大寫字母用於比較編譯查詢語句。要知道哪些查詢使用哪些索引,可以從系統視圖v$sql_plan_statistics_all中進行選擇,以提供適當的sql_id。