oracle中的索引和约束

来源:互联网 发布:小天才早教软件 编辑:程序博客网 时间:2024/05/22 03:06
1.创建一般的索引
create index ename_idx on emp(ename);
2.查询用户下索引信息
select index_name,index_type,table_name,uniqueness from user_indexes;
3.查询索引所在列的信息
select index_name,table_name,column_name,column_position
from user_ind_columns
4.避免在DML操作比较频繁的表上创建索引
为了可能使用索引,尽量把索引的关键字放到select语句的where字句中.
5.
建立索引的条件:


(1)表很大而且大多数查询的返回数据量很少,oracle推荐小于总行数的百分之二到百分之四).因为如果返回数据量很大的话就不如顺序扫描这个表了。
(2)此列的取值范围很广,一般为随机分布。
(3)一列或多列经常出现在where字句或连接条件中。
(4)表上的DML操作很少
(5)此列包含了大量的空值(NULL)
(6)此列不经常作为select语句中某个表达式的一部分


6.基于函数的索引
create index emp_idx on zgk.test(id-3);
select index_name from all_indexes where owner='ZGK';
select index_owner,index_name,table_name from all_ind_columns
where table_name='TEST';


select index_name,index_type,table_name,uniqueness from user_indexes
where table_owner='ZGK';
7.检测索引是否使用过(以下语句属于执行计划的一部分)
(1)@$ORACLE_HOME/rdbms/admin/utlxplan
(2)explain plan for select id from test where (id-3)<0;
(3)select id,operation,options,object_name,position from plan_table;


8.当一个索引不再需要时,应该删除它以释放这个索引所占有的磁盘空间。另外在大规模输入之前,为了加快输入数据的速度有时也应该先删除索引.等数据输入之后再重建这些索引
drop index 索引名
select index_name from user_indexes;(查看索引是否真的删除)
(注:如果我们删除了一个表,那么基于该表上的索引会自动删除)
9.约束
非空约束(not null)
唯一约束(unique)
主键约束(primary key)
外键约束(foreign key)
条件约束(check)
select owner,constraint_name,constraint_type,table_name
from user_constraints(查询当前用户下得约束)
desc user_cons_columns(查询当前用户下约束列的详细信息)
alter table test1 add constraint c_iname check (iname is not null);添加check约束
alter table test1 drop constraint c_iname;(删除约束)
select owner,constraint_name,table_name,column_name from  user_cons_columns;
alter table test1 add constraint c_test1 unique(id);(添加unique约束)
select owner,constraint_name,constraint_type,table_name,search_condition
from user_constraints(查询约束)
create table test(
id number,
name varchar2(10),
constraint c_tname check(name is not null)
);(创建约束)
alter table test add constraint c_pk primary key(id);添加主键约束
alter table test2 add constraint c_fk 
foreign key(id) references test(id);(添加主键约束)
(on delete set null/on delete cascade消除外键约束)
10.约束维护
alter table test disable constraint c_tname;(无效无效)
select constraint_name,constraint_type,table_name,status 
from user_constraints
where table_name='TEST';(查看约束状态)
alter table test enable constraint c_tname;(约束有效)
alter table test drop constraint c_tname;(删除约束)
alter table test drop constraint c_pk cascade;(强制删除)