当前位置:Gxlcms > 数据库问题 > Oracle索引详解

Oracle索引详解

时间:2021-07-01 10:21:17 帮助过:17人阅读

select * from emp where UPPER(job) = MGR

  下面的查询使用 JOB 列上的索引,但是它将不会返回 JOB 列具有 Mgr 或 mgr 值的行:

   1 select * from emp where job = MGR; 

  可以创建这样的索引,允许索引访问支持基于函数的列或数据。可以对列表 达式 UPPER(job)创建索引,而不是直接在 JOB 列上建立索引,如: 

   1 create index EMP$UPPER_JOB on emp(UPPER(job)); 

 

尽管基于函数的索引非常有用,但在建立它们之前必须先考虑下面一些问题:

  1. 能限制在这个列上使用的函数吗?如果能,能限制所有在这个列上执行的所有函数吗?
  2. 是否有足够应付额外索引的存储空间?
  3. 在每列上增加的索引数量会对针对该表执行的 DML 语句的性能带来何种影响? 

  基于函数的索引非常有用,但在实现时必须小心。在表上创建的索引越多,INSERT、UPDATE 和 DELETE 语句的执行就会花费越多的时间。 注意:对于优化器所使用的基于函数的索引来说,必须把初始参数 QUERY_REWRITE _ ENABLED 设定为 TRUE。 

  示例: 

1 select count(*) from sample where ratio(balance,limit) >.5;
2 time: 20.1 minutes
3 
4 create index ratio_idx1 on sample (ratio(balance, limit)); 
5 
6 select count(*) from sample where ratio(balance,limit) >.5;
7 time: 7 seconds

 

Oracle索引详解

标签:rowid   从表   sel   second   span   tle   其他   不同   进程终止   

人气教程排行