欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

oracle索引、视图和闪回数据归档讲解

程序员文章站 2023-11-10 23:44:46
索引 准则:当任何单个查询要检索的行少于或等于整个表行数的10%时,就应当创建索引。 b-树索引:索引的候选列应该是用来存储很大范围的值的列 位图索引:包含小范围值的列 1.创建b-树索引 注意:由...

索引

准则:当任何单个查询要检索的行少于或等于整个表行数的10%时,就应当创建索引。

b-树索引:索引的候选列应该是用来存储很大范围的值的列

位图索引:包含小范围值的列

1.创建b-树索引

注意:由于性能原因,应该将索引与表存储到不同的表空间中。

假设test表包含很多行

select id,type
from test
where type='01';
create index i_test_type on test(type);

唯一索引

create unique index i_test_id on test(id);

复合索引

create index i_test_id_type on test(id, type);

2.创建基于函数的索引

select id,type
from test
where type=upper('sfz');
create index i_func_test_type on test(upper(type));

注意:使用基于函数的索引,必须要将初始化参数query_rewrite_enabled设置为true。

3.获取有关信息的索引

select index_name, table_name, uniqueness, status
from user_indexes
where table_name='test';

4.获取列索引的信息

select index_name, table_name, column_name
from user_ind_columns
where table_name='test';

5.修改索引

alter index i_test_id_type rename to i_test_id_and_type;

6.删除索引

drop index i_test_id_and_type;

7.创建位图索引

create bitmap index i_order on order(status);

视图

注意:视图并不存储行,他们始终存储在表中。视图返回存储在表中的行

1.创建视图

connect system/systemgrant create view to zoey;
connect zoey/zoey

create view test_view asselect * from test where type='02';

使用视图

select id from test_view;

注意:简单视图支持dml操作,复杂视图不支持dml操作。

2.创建具有check option约束的视图指定对视图执行的dml操作必须满足子查询的条件。

create view test_view2 asselect * from test where type='02'
with check option constraint test_view2;

3.创建具有read only约束的视图(只读)

create view test_view3 asselect * from test where type='02'
with read only constraint test_view2;

4.获取有关视图定义的信息

describe test_view3;

5.获取有关视图的约束信息

select constraint_name, constraint_type, status , deferrable, deferred
from user_constraintswhere table_name='test';

6.修改视图

create or replace view test_view3 asselect * from test where type in ('02', '01');

7.删除视图

drop view test_view3;

五.闪回数据归档

create flashback archive test_archivetablespace example --归档在example创建
quota 1 m --限额是1m
retention 1 day;--保留期限是1天

停止归档

alter zoey.test no flashback archive;

清除归档中的所有数据

alter flashback archive test_archive purge all;

删除闪回归档

drop flashback archive test_archive;