72.簇是存储表数据的一种可选方法,它由共享相同数据块的一组表组成。将表组织到簇后,Oracle会将不同表的相关数据存放到相同数据块。这样不仅降低了簇键列所占用的磁盘空间,而且可以大大降低特定SQL操作的I/O次数,从而提高数据访问性能。
使用索引簇存储表数据时,Oracle会将后。不同表的相关数据按照簇键值存放到簇段中。
当建立了索引簇DEPT_EMP,并将DEPT和EMP表组织到索引簇后,Oracle会按照簇键DEPTNO存放相关数据。
索引簇管理方针
选择合适的簇表,主要用于执行select操作
选择合适的簇键列
指定块空间使用参数
指定簇键值和相关行的平均空间
指定簇和簇索引的存放位置
73.建立索引簇
create cluster dept_emp_clu(deptno number(3)) pctfree 20 pctused 60 size 500 tablespace user01;
建立簇表
create table department(
id number(3) primary key,dname varchar2(14),loc varchar2(13)
)cluster dept_emp_clu(id);
create table employee(
eno number(4) primary key,ename varchar2(10),job varchar2(9),mgr number(4),hiredate date,
sal number(7,2),comm number(7,2),dept_id number(3) references department
)cluster dept_emp_clu(dept_id);
建立簇索引
create index dept_emp_idx on cluster dept_emp_clu tablespace user02;
使用索引簇
set autotrace on explain
select a.dname,b.ename,b.sal,b.job from department a,employee b
where a.id = b.dept_id and a.id=10;
drop cluster dept_emp_clu;
drop cluster dept_emp_clu including tables;
建立散列簇
create cluster employee_clu (id number(4)) size 500 hashkeys 1000 hash is mod(id,1000) tablespace user01;
建立簇表
create table emp1(
id number(4),name varchar2(13),sal number(6,2)
)cluster employee_clu(id);
显示簇信息
select cluster_name,tablespace_name from dba_clusters where owner='SCOTT';
74.在视图上执行DML操作的原则
如果视图包含GROUP BY子句、分组函数和DISTINCT关键字,则不能在该视图上执行任何DML操作
UPDATE操作原则:不能更新基于函数或表达式所定义的列,不能更新伪劣(ROWID和ROWNUM等)
INSERT操作原则:如果视图不能饱和表的not null列,则不能通过视图增加数据
75.create public synonym public_emp for scott.emp;引用该同义词,还必须具有访问SCOTT.EMP表的权限
该同义词属于PUBLIC用户组,所有用户都可以直接
create synonym private_emp for scott.emp;
drop public synonym public_emp;