Oracle模式对象

一、 索引

1. 注意:

①. 索引应该建在WHERE子句频繁引用表列上。
eg:频繁使用的大表上某列或某几列,并且索引行数低于总行数的15%,应该建立索引。
②. 经常基于某列或某几列执行排序操作,应该建立索引。
③. 限制表的索引个数。
索引会加快查询,但会降低DML操作。应该衡量查询和DML的需求。
④. 指定索引块空间的使用参数。基于表建立索引时,Oracle会将相应表列数据添加到索引块,为索引块添加数据时,Oracle会按照PCTFREE参数在索引块上预留部分空间,该预留空间是为将来INSERT操作准备的,如果将来在表上执行大量的INSERT操作,那么应该设置较大的PCTFREE。
⑤. 将表和索引部署到相同的表空间,可以简化表空间的管理。反之,可以提高访问性能。
⑥. 不要在小表上建立索引。
⑦. 为了提高多表连接性能,应该在连接上建立索引。

2. 索引管理

a. 索引的建立

①. B树索引

语法:

 

CREATE  INDEX  INDEX_NAME  ON  TABLE_NAME(COLL_NAME1[,COLL_NAME2[,...]])  
[PCTFREE  PCTFREE_PARA] 
[TABLESPACE  TABLESPACE_NAME];

注意:
如果WHERE子句中要经常应用某列或某几列,应该基于这些列建立B树索引。
②. 位图索引

语法:

CREATE  BITMAP  INDEX  INDEX_NAME  ON  TABLE_NAME(COLL_NAME1[,COLL_NAME2[,...]])  
[TABLESPACE  TABLESPACE_NAME];

注意:
(1)CREATE_BITMAP_AREA_SIZE参数用于指定建立位图索引时分配的位图区大小,默认值为8M,该值越大位图索引越快,该值是静态参数,修改后必须重启数据库。
(2)当列的基数很低小于1%时,这些列不再适合建立B树索引,适用位图索引。如拥有10000行的表,刚好一个列包含100个不同的值。
③. 反向键索引

语法:

CREATE INDEX INDEX_NAME ON TABLE_NAME REVERSE 
TABLESPACE TABLESPACE_NAME;

修改:将普通的B树索引改为反向键索引。
ALTER INDEX INDEX_NAME REBUILD REVERSE;
注意:
反向键索引是一种特殊类型的B树索引,在顺序递增列上建立此索引非常有用。原因:在常规B树索引,如果要为其添加新数据,用于主键列的单调递增,很明显不需要重新访问早先的叶子节点。即使删除了先前的节点,也会在单调增序列上的索引继续利用她的叶子节点,导致对某一边的叶子节点大量占用。
④. 基于函数的索引

语法:

CREATE  INDEX  INDEX_NAME  ON  TABLE_NAME(FUNCTION_NAME(COL_NAME));

注意:
如果在查询条件中包含相同的函数,则系统会利用它来提高查询的执行效率。

b. 修改索引

随着对表的不断更新、插入和删除操作,索引中会产生越来越多的存储碎片,降低工作效率。因此需要合并索引或者重建索引。
①. 合并索引

语法:

ALTER  INDEX  INDEX_NAME  COALESCE  DEALLOCATE  UNUSED;

注意:
合并索引不会改变索引的物理组织机构。
②. 重建索引 

语法:

ALTER  INDEX  INDEX_NAME  REBUILD  TABLESPACE  TABLESPACE_NAME;

注意:
重建索引不仅可以消除存储碎片,还可以改变索引的全部存储参数设置,以及改变索引的存储表空间,实际上是建立一个新索引,再删除原索引。

c. 删除索引

语法:

DROP INDEX INDEX_NAME;

注意:
(1)如果索引中包含过多的存储碎片,此时需要删除再重建
(2)通过一段时间的监视,发现很少有查询使用到该索引应该删除此索引。
(3)该索引不在需要时,应当删除,释放占用空间。

3. 显示索引信息

a. 查询表的索引

DBA_INDEXES显示数据库的所有索引信息,ALL_INDEXES显示当前用户可访问的所有索引信息,USER_INDEXES显示当前用户的索引信息。

b. 查询索引列

DBA_IND_COLUMNS显示数据库的所有索引的表列信息,ALL_IND_COLUMNS显示当前用户可访问的所有索引的表列信息,USER_IND_COLUMNS显示当前用户的索引的表列信息。

c. 查询索引函数

DBA_IND_EXPRESSIONS显示数据库的所有索引列所对应的函数或表达式,USER_IND_EXPRESSIONS显示当前用户可访问的所有索引所对应的函数或表达式。

二、 视图

视图是一个虚拟表,它建立一个或多个关系表之上,也可以在其他一个或多个视图上。修改视图数据实际上是修改基础表数据。可以在视图上进行DML操作,但要使用触发器。

1. 创建或替换视图

语法:

CREATE  [OR REPLACE]  VIEW  VIEW_NAME  
[ALIAS[,ALIAS]]  AS  QUERY_SENTENCE 
[WITH CHECK OPTION]  
[CONSTRAINT CONSTRAINT_NAME]  
[WITH READ ONLY];

ALIAS:用于指定视图列别名
QUERY_SENTENCE:查询语句(多表联合查询等等)
WITH CHECK OPTION:该子句用于指定视图上的CHECK约束。

WITH READ ONLY:定义只读视图。


拓展:
①.简单视图:
建立在单表上,不包含任何函数,表达式和分组数据的视图。
②.只读视图:
带有 WITH READ ONLY子句的视图
③.复杂视图:
指包含函数、表达式、或分组数据的视图,查询语句中包含函数或表达式时必须为其定义列别名。且主要用于执行查询操作。
④.连接视图
建立在多个表之上的视图。必须使用WHERE子句中指定有效的连接条件。
2.查看视图
查看结构:DESC VIEW_NAME
3.重新编译视图
ALTER VIEW VIEW_NAME COMPLILE;
注意:视图的基础表被修改后,可手动重新编译视图,Oracle也可以自动编译视图。
4.删除视图
DROP VIES VIEW_NAME;

三、同义词

同义词是表、视图、索引等模式对象的一个别名。模式对象创建同义词,可以隐藏对象的实际名称和所有这信息,或者隐藏分布式数据库中远程对象的设置信息,由此为对象提供一定的安全性保障。
1.创建同义词
语法:

CREATE [PUBLIC] SYNONYM SYNONYM_NAME 
FOR MODEL_OBJECT

PUBLIC:建立公有同义词,该同义词属于PUBLIC组,所有用户都可以引用。反之,表示私有同义词,只有当前用户可以直接引用,其他用户引用必须带模式名。
MODEL_OBJECT:表示模式对象名称。
2.删除同义词

语法:

DROP [PUBLIC] SYNONYM SYNONYM_NAME; 

注意:

删除后,基础模式对象不会受影响,但引用该同义词的对象将处于INVALID状态。


四、序列对象

序列是Oracle提供的用于生成一系列唯一数字的数据库对象。序列可以在多用户环境并发环境中使用,并且可以为所有用户生成不重复的数字,而不需任何的I/O开销。

1. 创建序列

CREATE SEQUENCE SEQUENCE_NAME  
[START WITH START_NUM]  
[INCREMENT BY INCREMENT_NUM]  
[MINVALUE MINVALUE_NUM | NOMINVALUE ]  
[MAXVALUE MAXVALUE_NUM | NOMAXVALUE ]
[CACHE CACHE_NUM | NOCACHE]
[CYCLE | NOCYCLE]
[ORDER | NOORDER];

INCREMENT_NUM:可选,默认是1。
MINVALUE_NUM:可选,序列生辰的最小值。
MAXVALUE:可选,序列生辰的最大值。
START_NUM:可选,指定序列开始的位置,默认情况下,递增序列是MINVALUE_NUM,递减序列是MAXVLUE_NUM。
CACHE_NUM:可选,预分配序列,并存储在内存中。
CYCLE:可选,当序列达到最大值或最小值是,可以复位并继续下去。如果使用nocycle,达到极限值返回错误。
ORDER:可选,可以保证第一个请求得到的数1,第二个是2...。而NOORDER只保证序列的值得唯一性。

拓展:
序列的方法:
NEXTVAL:首次引用序列时,必须使用NEXTVAL。
CURRVAL:返回序列的当前序列号。
2. 查看序列结构
DESC SEQUENCE_NAME;
3. 修改序列
ALTER SQUENCE语句除了START WITH 不能被修改外,其他的语法基本都相同。

4. 删除序列

DROP SEQUENCE SEQUENCE_NAME;





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值