Oracle索引访问行为

时间:2017-05-05 16:57:14

标签: oracle

我有一个表客户,其字段为customer_id,customer_fname,customer_lname,customer_address。

我在客户

上创建了索引cust_index
CREATE INDEX cust_index
ON customer (UPPER(customer_id));

我使用查询

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

我想知道cust_index会在我的选择查询中使用吗?

2 个答案:

答案 0 :(得分:2)

仅当where子句签名与索引签名完全匹配时,才使用基于函数的索引。如果您请求编译的索引体,您将看到它以大写形式编译,以便与编译的查询语句进行比较。要知道哪些索引使用了哪个查询,可以从提供适当sql_id的系统视图v$sql_plan_statistics_all中进行选择。

答案 1 :(得分:1)

你必须谷歌搜索“基于oracle成本的优化器”并解释计划。

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

这将显示用于查询的时髦。

或运行查询并

SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR) 

它将显示最后一个光标/查询的真实计划。

如果oracle已选择游标来访问解释计划中的数据,则显示"INDEX somthing SCAN index_name "