oracle 索引概述

一. 概念
(1) 类似书的目录结构,可以提高数据检索的速度
(2) 索引直接指向包含所查询值的行的位置,减少磁盘I/O
(3) 索引与表在物理上独立,Oracle 自动使用并维护索引,插入、删除、更新表后,自动更新索引
(4) 建立索引时,要考虑好索引的存储开销与性能上的获益之间的比重,不要盲目建立索引

二.分类

1.唯一索引

当建立Primary Key(主键)或者Unique constraint(唯一约束)时,唯一索引将被自动建立
唯一索引可为空,但不为空时,值需都不相同。
语法:CREATE UNIQUE INDEX index_name ON table (column);

2.组合索引
当两个或多个列经常一起出现在where条件中时,则在这些列上创建组合索引

(1)RBO 下 where 子句为非前导列
rbo下where为非前导列时,执行计划不走索引。
SQL> explain plan for select /*+rule*/* from t1 where c2=1;
Explained

SQL> select * from table (dbms_xplan.display);
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 3617692013
----------------------------------
| Id  | Operation         | Name |
----------------------------------
|   0 | SELECT STATEMENT  |      |
|*  1 |  TABLE ACCESS FULL| T1   |
----------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   1 - filter("C2"=1)
Note
-----
   - rule based optimizer used (consider using cbo)
17 rows selected

(2)CBO 下 where 子句为非前导列
从9i起,oracle在cbo下引入了索引跳跃扫描(index skip scan),即使SQL语句的where子句中没有组合索引的前导列,也能使用该索引。
SQL> explain plan for select * from t1 where c2=2;
Explained

SQL> select * from table (dbms_xplan.display);
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 3617692013
--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
------------------------------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值