您的位置:首页 > 数据库 > Oracle

Oracle OCP笔记(15)模式对象(表,约束,索引等)

2015-03-11 10:18 225 查看

Oracle OCP笔记(15)模式对象(表,约束,索引等)

一.模式对象:

共享名称空间模式对象: 表、视图、序列、同义词、存储过程、函数、包、物化视图、用户定义类型

各自具有名称空间的模式对象: 索引、约束、群集、触发器、数据库链接、维度

二.创建和修改表

select * from dba_tables; -- 查看所有表

创建表

create table tablename(

column1 varchar2(20),

column2 varchar2(30),

constraint pk_tablename primary key(column1,column2)

using index tablespace idxtbs

)tablespace dattbs;

create table tablename as select * from tablename2 where 1=2;

修改表

alter table tablename add (column3 varchar2(30)); -- 添加列

alter table tablename modify (column3 varchar2(40)); -- 修改列

alter table tablename rename column column3 to column4; -- 重命名列

alter table tablename drop column column4; -- 删除列

alter table tablename rename to newtab; -- 重命名表

删除表

drop table tablename [cascade constraints]; -- 同时删除相关的索引和触发器

临时表

create global temporary table temp_tab_name

(column datatype[, column datatype...])

[on commit {delete|preserve} rows];

三.管理约束

约束类型

·UNIQUE -- constraint uk_tablename unique (column1,...)

·NOT NULL

·PRIMARY KEY -- constraint pk_tablename primary key (column1,...) using index tablespace tbs

·FOREIGN KEY -- constraint fk_tablename foreign key (column1,..) references tablename(column1,...)

·CHECK -- constraint chk_tablename check (column1 > 1)

select * from dba_constraints; -- 约束

-- 添加约束

alter table add constraint pk_tablename primary key (column1,...) using index tablespace tbs;

-- 重命名约束

alter table tablename rename constraint old_name to new_name;

UNIQUE和PRIMARY KEY约束需要索引,如果不存在,会自动创建。

约束状态:

·ENABLE VALIDATE -- 无法输入违反了约束的行,而且表中的所有行都符合约束

·DISABLE NOVALIDATE -- 可以输入不符合约束的行,表中可能已存在不符合约束的行

·ENABLE NOVALIDATE -- 输入的行必须符合约束,但表中可能已存在不符合约束的行

·DISABLE VALIDATE -- 不可能的情况

四.索引

索引有两个功能: 一是为了实施主键和唯一性约束,二是为了提高性能.

主键和唯一性约束,如果不存在索引,会自动创建。

外键约束将子表中的列与父表中的主键或唯一键关联起来。在子表中插入行时,Oracle将在父表中查找索引,在确认存在匹配的行后才允许执行插入。

始终应在子表的外键列上创建索引:

(1)在父表上做DELETE操作时,如果Oracle可以使用索引来确定子表中是否存在引用被删除行的行时,DELETE操作速度将大大加快.

(2)如果在子表外键列上没有索引,在子表上做INSERT和DELETE时,会锁定整个父表的所有行,频繁修改父表和子表时,将导致锁定和死锁问题.

索引提高性能的几个方面

(1)包含where子句的SQL语句.

(2)排序: 包括ORDER BY、GROUP BY、UNION关键字.

(3)连接表: 不过会根据表的大小和可用内存资源做出选择,将表扫描到内存中并在那里将它们连接在一起可能比使用索引的速度更快.

嵌入式循环连接(nested loop join): 使用另一个表上的索引遍历一个表. 大量磁盘操作.

散列连接(hash join): 将整个表读入内存,将其转换成散列表,然后使用散列算法定位匹配的行. 大量内存和CPU操作.

排序归并连接(sort merge join): 在连接列上排序表,然后将它们归并在一起. 磁盘、内存、CPU资源折中方案.

对于SELECT、UPDATE、DELETE、MERGE语句,索引可以提高性能,但对于INSERT语句,索引会降低处理速度。

select * from dba_indexes;

索引类型:

B*树索引

位图索引

创建索引:

create [unique|bitmap] index [schema.]indexname

on [schema.]tablename (column[, column...])

tablespace tbs;

删除索引:

drop index indexname;

重建索引:

alter index index_name rebuild online nologging;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐