2017-05-05 12 views
0

私はテーブルcustomerにフィールドcustomer_id、customer_fname、customer_lname、customer_addressを持っています。Oracleインデックスのアクセス動作

私が知りたい私は

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

としてクエリを使用しています顧客

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

にインデックスcust_indexを作成しているがcust_indexが私の選択クエリで使用されるのですか?

+0

このクエリでは、no select customer from customer_id =? はこのyesです。select * from customer where upper(customer_id)=? しかし、それは多くの要因によって異なります。 –

+0

返信ありがとうArkadiusz。 – user3090158

+0

Arkadiuszあなたはどのように特定のクエリをチェックするかどうか、任意のインデックスを使用しているかどうか? – user3090158

答えて

1

"oracle cost based optimizer"についてgoogleを使用し、計画を説明する必要があります。

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

のみ句署名が完全にインデックス署名をmatchs場所場合に使用関数ベースのインデックスが表示されます。コンパイルされたインデックス本体を要求すると、大文字でコンパイルされてコンパイルされたクエリ文との比較に役立つことがわかります。索引がどの問合せを使用しているかを知るには、システム・ビューv$sql_plan_statistics_allから適切なsql_idを選択して選択します。

関連する問題