ORACLE 数据库对象

ORACLE 数据库对象

——索引

 

q      索引是与表相关的一个可选结构

q      用以提高 SQL 语句执行的性能

q      减少磁盘I/O

q      使用 CREATE INDEX 语句创建索引

q      在逻辑上和物理上都独立于表的数据

q      Oracle 自动维护索引

 

索引的目标:提高查询性能

 

索引对增删改查的影响

SQL语句

对性能的影响

SELECT

查询性能提高

UPDATE

更新删除时需要先查询,从此角度性能提高

更新删除时引起索引修改,从此角度性能下降

DELETE

INSERT

增加引起索引改变,索引对其负面影响更大,性能下降

 

什么时候建立索引?

1.         需要频繁查询的数据

2.         数据量较多

3.         该列不会频繁 update/insert/delete

4.         where/order by/group by 字句中出现的列

5.         高基数列上建立索引(重复数据不多)

empno

ename

sal

1

HUANGPei

1000

1

HUANGPei

1000

3

HUANGPei

1000

4

HUANGPei

1000

 

empno

ename

sal

1

HUANGPei

1000

1

HUANGPei

1000

1

HUANGPei

1000

1

HUANGPei

1000

基数:3/4

基数:1/4

 

索引的类型

唯一索引

位图索引

组合索引

基于函数的索引

反向键索引

创建标准索引

 

CREATE INDEX item_index ON itemfile (itemcode)

     TABLESPACE index_tbs;

 

重建索引

 

ALTER INDEX item_index REBUILD;

 

删除索引

 

DROP INDEX item_index;

 

唯一索引

 

q      唯一索引确保在定义索引的列中没有重复值

q      Oracle 自动在表的主键列上创建唯一索引

q      使用CREATE UNIQUE INDEX语句创建唯一索引

CREATE UNIQUE INDEX item_index

     ON itemfile (itemcode);

 

组合索引

 

q      组合索引是在表的多个列上创建的索引

q      索引中列的顺序是任意的

q      如果 SQL 语句的 WHERE 子句中引用了组合索引的所有列或大多数列,则可以提高检索速度

CREATE INDEX comp_index

     ON itemfile(p_category, itemrate);

 

反向键索引

 

q      反向键索引反转索引列键值的每个字节

q      通常建立在值是连续增长的列上,使数据均匀地分布在整个索引上

q      创建索引时使用REVERSE关键字

CREATE INDEX rev_index

     ON itemfile (itemcode) REVERSE;

ALTER INDEX rev_index REBUID NOREVERSE;

 

位图索引

 

q      位图索引适合创建在低基数列上

q      位图索引不直接存储ROWID,而是存储字节位到ROWID的映射

q      减少响应时间

q      节省空间占用

CREATE BITMAP INDEX bit_index

     ON order_master (orderno);

 

索引组织表

 

q      索引组织表的数据存储在与其关联的索引中

q      索引中存储的是行的实际数据,而不是ROWID

q      基于主键访问数据

q      CREATE TABLE 命令与 ORGANIZATION INDEX 子句一起用于创建索引组织表

CREATE TABLE ind_org_tab (

       vencode NUMBER(4) PRIMARY KEY,

       venname VARCHAR2(20)

     )

     ORGANIZATION INDEX;

 

基于函数的索引

 

q      基于一个或多个列上的函数或表达式创建的索引

q      表达式中不能出现聚合函数

q      不能在LOB类型的列上创建

q      创建时必须具有 QUERY REWRITE 权限

CREATE INDEX lowercase_idx

     ON toys (LOWER(toyname));

SELECT toyid FROM toys

     WHERE LOWER(toyname)='doll';

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值