Oracle 学习(二)---索引

本文介绍了Oracle数据库中索引的创建,包括普通索引、唯一索引、组合索引、反向键索引等,并讨论了唯一索引与普通索引的区别。此外,还探讨了建立索引的目的,如提高查询速度和数据检查,以及如何通过ALTER INDEX进行索引重建和优化。最后,提到了删除索引的方法以及一个特殊示例:将字段转化为大写并创建索引。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章引用参考          

http://www.cnblogs.com/djcsch2001/articles/1823459.html


索引的创建


create (unique) index index_name on table (column)

[ASC|DESC] [TABLESPACE tablespace] 
index_name为索引的名称
ASC|DESC 为升序降序排列
TABLESPACE 表空间

创建索引的标准语法:

CREATE INDEX 索引名 ON 表名 (列名) 

     TABLESPACE 表空间名; 

创建唯一索引:

CREATE unique INDEX 索引名 ON 表名 (列名) 

     TABLESPACE 表空间名; 

创建组合索引:

CREATE INDEX 索引名 ON 表名 (列名1,列名2) 

     TABLESPACE 表空间名; 

创建反向键索引:

CREATE INDEX 索引名 ON 表名 (列名) reverse

     TABLESPACE 表空间名; 


先来说一下unique的使用和差别

添加unique后表示为唯一索引

区别:唯一索引unique index和一般索引normal index最大的差异是在索引列上增加一层唯一约束。添加唯一索引的数据列可以为空,但是只要尊在数据值,就必须是唯一的。

联系:1)unique index就是额外添加唯一性的约束。该约束严格的保证索引列的取值是唯一的,这在一些数据列上的业务约束是很重要的功能。比如一个数据列,不能作为主键,而且允许为空,但是业务上要求唯一特性,这个时候用唯一性索引就是最好的旋转。2)性能上两者并无很大区别。

using index用法:

create primary key …. Using index :创建主键的时候同时将其设为索引,名称与主键名称相同。

在创建一个PK的时候,会自动创建一个与之对应的唯一索引。(因为某个字段如果被设置为Unique便会自动被设为索引)。如果不特别指定,这个索引的表空间和表的表空间是一样的,但是不建议将两者放在一起。

create table test_table(name varchar(20));//不声明tablespace 默认分配一个表空间
alter table test_table add (id primary key) using index tablespace tablespace1;//没有声明名称默认为primary key相同的名称

2.建立索引的目的

建立索引的目的是:
l 提高对表的查询速度;
l 对表有关列的取值进行检查。

但是,对表进行insert,update,delete处理时,由于要表的存放位置记录到索引项中而会降低一些速度。
注意:一个基表不能建太多的索引;
      空值不能被索引
      只有唯一索引才真正提高速度,一般的索引只能提高30%左右。

 
索引的修改


ALTER [UNIQUE] INDEX [user.]index
[INITRANS n]
[MAXTRANS n] 
REBUILD 
[STORAGE n]

其中:
REBUILD 是根据原来的索引结构重新建立索引,实际是删除原来的索引后再重新建立。

ALTER [UNIQUE] INDEX [user.]index
[INITRANS n]
[MAXTRANS n] 
REBUILD 
[STORAGE n]

提示:DBA经常用 REBUILD 来重建索引可以减少硬盘碎片和提高应用系统的性能。

例:
alter index pk_detno rebuild storage(initial 1m next 512k);

ALTER INDEX emp_ix REBUILD REVERSE;//Reverse 为反转函数

Oracle8i 的新功能可以对索引的无用空间进行合并,它由下面命令完成:

ALTER INDEX . . . COALESCE;

索引的删除

DROP INDEX [schema.]indexname

 

例如:

sql> drop index test_index;

注:当表结构被删除时,有其相关的所有索引也随之被删除。

PS:

//将test_table name 字段转化为大写函数 (虽然我还不知道他的具体应用价值在哪里 = =)

Create index upper_index on test_table(upper(name));

 select * from test_table where upper(name) like 'JOH%';









 




ALTER [UNIQUE] INDEX [user.]index
[INITRANS n]
[MAXTRANS n] 
REBUILD 
[STORAGE n]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值