oracle序列的改变解析

oracle序列的改变解析
oracle序列的改变解析

?范围分区

?以表中的一个列或一组列的值的范围分区

?范围分区的语法:

PARTITION BY RANGE (column_name)

(

PARTITION part1 V ALUE LESS THAN(range1),

PARTITION part2 V ALUE LESS THAN(range2),

...

[PARTITION partN V ALUE LESS THAN(MAXV ALUE)]

);

?散列分区

?允许用户对不具有逻辑范围的数据进行分区

?通过在分区键上执行HASH函数决定存储的分区

?将数据平均地分布到不同的分区

?散列分区语法

PARTITION BY HASH (column_name)

PARTITIONS number_of_partitions;

PARTITION BY HASH (column_name)

( PARTITION part1 [TABLESPACE tbs1],

PARTITION part2 [TABLESPACE tbs2],

...

PARTITION partN [TABLESPACE tbsN]);

?列表分区

?允许用户将不相关的数据组织在一起?列表分区的语法:

PARTITION BY LIST (column_name)

(

PARTITION part1 V ALUES (values_list1),

PARTITION part2 V ALUES (values_list2),

...

PARTITION partN V ALUES (DEFAULT)

);

?复合分区

?范围分区与散列分区或列表分区的组合

?复合分区的语法:

PARTITION BY RANGE (column_name1)

SUBPARTITION BY HASH (column_name2)

SUBPARTITIONS number_of_partitions

(

PARTITION part1 V ALUE LESS THAN(range1),

PARTITION part2 V ALUE LESS THAN(range2),

...

PARTITION partN V ALUE LESS THAN(MAXV ALUE)

);

引用分区:基于由外键引用的父表的分区的方

法,它依赖已有的父表子表的关系,子表通过外键

关联到父表,进而继承了父表的分区方式而不需自

己创建,子表还继承了父表的维护操作。

1,主表是范围分区,子表是引用分区

2,主表是列表分区,子表是引用分区

3,主表是散列分区,子表是引用分区

间隔分区:可以完全自动地根据间隔阈值创建范

围分区,它是范围分区的扩展。

在数据仓库中有广泛的应用。

基于虚拟列的分区:把分区建立在某个虚拟列

上,即建立在函数或表达式的计算结果上,来完成

某种任务。

系统分区:不指定分区列,由ORACLE来完成分

区的控制和管理,它没有了范围分区或列表分区的

界限

?在已分区的表中插入数据与操作普通表完全相同,Oracle会自动将数据保存到对应的分区

?查询、修改和删除分区表时可以显式指定要操作的分区

INSERT INTO SALES3 V ALUES (‘P001’, ’02-3月-2001', 2000);

INSERT INTO SALES3 V ALUES (‘P002’, ’10-5月-2001', 2508);

INSERT INTO SALES3 V ALUES (‘P003’, ’05-7月-2001', 780);

INSERT INTO SALES3 V ALUES (‘P004’, ’12-9月-2001', 1080);

SELECT * FROM SALES3 PARTITION (P3);

DELETE FROM SALES3 PARTITION (P2);

?分区维护操作修改已分区表的分区。

?分区维护的类型:

?计划事件-定期删除最旧的分区

?非计划事件-解决应用程序或系统问题?分区维护操作有:

?添加分区

?删除分区

?截断分区

?合并分区

?拆分分区

?添加分区–在最后一个分区之后添加新分区

SQL> ALTER TABLE SALES

ADD PARTITION P4 V ALUES LESS THAN (4000);

?删除分区–删除一个指定的分区,分区的数据也随之删除SQL> ALTER TABLE SALES DROP PARTITION P4;

?截断分区–删除指定分区中的所有记录

SQL> ALTER TABLE SALES TRUNCATE PARTITION P3;

?合并分区- 将范围分区或复合分区的两个相邻分区连接起来SQL> ALTER TABLE SALES

MERGE PARTITIONS S1, S2 INTO PARTITION S2;

?拆分分区- 将一个大分区中的记录拆分到两个分区中SQL> ALTER TABLE SALES SPLIT PARTITION P2 AT (1500)

INTO (PARTITION P21, PARTITION P22);

?同义词是现有对象的一个别名。

?简化SQL语句

?隐藏对象的名称和所有者

?提供对对象的公共访问

?同义词共有两种类型:

私有同义词只能在其模式内访问,且不能与当前模式的对象同名。

?序列是用于生成唯一、连续序号的对象

?序列可以是升序的,也可以是降序的

?使用CREATE SEQUENCE语句创建序列

指定内存中预先分配的序号数

SQL> CREATE SEQUENCE stu_seq

START WITH 1

INCREMENT BY 1

MAXV ALUE 2000

MINV ALUE 1

NOCYCLE

CACHE 10;

通过序列的伪列来访问序列的值

NEXTV AL 返回序列的下一个值

CURRV AL 返回序列的当前值

第一次使用序列中的值的时候,要使用NEXTV AL

使用ALTER SEQUENCE语句修改序列,

不能更改序列的START WITH参数

SQL> ALTER SEQUENCE stu_seq MAXV ALUE 5000 CYCLE;

使用DROP SEQUENCE语句删除序列

SQL> DROP SEQUENCE stu_seq;

?视图以经过定制的方式显示来自一个或多个表的数据

?视图可以视为“虚拟表”或“存储的查询”

?创建视图所依据的表称为“基表”

?视图的优点有:

?提供了另外一种级别的表安全性

?隐藏的数据的复杂性

?简化的用户的SQL命令

?隔离基表结构的改变

?通过重命名列,从另一个角度提供数据

创建视图的语法:

CREATE [OR REPLACE] [FORCE] VIEW

view_name [(alias[, alias]...)]

AS select_statement

[WITH CHECK OPTION]

[WITH READ ONL Y];

使用WITH CHECK OPTION 选项创建视图

create or replace view view2 as select * from student where sno=3 with check option;

使用ORDER BY 子句创建视图

create or replace view view3 as select * from student order by sno desc;

创建带有错误的视图

CREATE FORCE VIEW ven AS

SELECT * FROM address;

联接视图

相等连接(第一种写法):

select table1.column,table2.column

from table1, table2

where table1.column1=table2.column2

可以使用表的别名,为了书写的简化。

相等连接(第二种写法):

select table1.column,table2.column

from table1 inner join table2

on table1.column1=table2.column2

可以使用表的别名,为了书写的简化。

左外连接(第一种写法):

select table1.column,table2.column

from table1 left outer join table2

on table1.column1=table2.column2

可以使用表的别名,为了书写的简化。

左外连接(第二种写法):

select table1.column,table2.column

from table1, table2

where table1.column1=table2.column2(+)

可以使用表的别名,为了书写的简化。

?在视图上也可以使用修改数据的DML语句,如INSERT、UPDATE和DELETE ?视图上的DML语句有如下限制:

?只能修改一个底层的基表

?如果修改违反了基表的约束条件,则无法更新视图

?如果视图包含连接操作符、DISTINCT 关键字、集合操作符、聚合函数或GROUP BY 子句,则将无法更新视图

?如果视图包含伪列或表达式,则将无法更新视图

键保留表

CREATE VIEW view_stu_dept AS

select s.sno, s.sname, s.deptno, d.deptname from student s, department d

where s.deptno = d.deptno;

update view_stu_dept set deptno='d' where sno=1;

-- 可以更新键保留表的列

update view_stu_dept set department='历史系' where sno=1;

-- 不可以更新非键保留表的列

?视图中可以使用单行函数、分组函数和表达式

?必须为使用函数或者表达式的字段指定名字

CREATE VIEW item_view AS

SELECT itemcode, LOWER(itemdesc) item_desc

FROM itemfile;

?使用DROP VIEW语句删除视图

SQL> DROP VIEW toys_view;

?索引是与表相关的一个可选结构

?用以提高SQL 语句执行的性能

?减少磁盘I/O

?使用CREATE INDEX 语句创建索引

?在逻辑上和物理上都独立于表的数据

?Oracle 自动维护索引

?索引分为:B树索引(平衡树索引)、位图索引。

?B树索引分为:唯一索引、组合索引、反向键索引、基于函数的索引

创建标准索引

SQL> CREATE INDEX item_index ON itemfile (itemcode)

TABLESPACE index_tbs;

分析索引

?analyze index validate structure;

查看index_stats表中的pct_used列的值,如果pct_used的

值过低,说明在索引中存在碎片,可以重建索引,来提高

pct_used的值,减少索引中的碎片。

?唯一索引确保在定义索引的列中没有重复值

?Oracle 自动在表的主键列上创建唯一索引

?使用CREATE UNIQUE INDEX语句创建唯一索引

SQL> CREATE UNIQUE INDEX item_index

ON itemfile (itemcode);

?组合索引是在表的多个列上创建的索引

?索引中列的顺序是任意的

?如果SQL 语句的WHERE 子句中引用了组合索引的所有列或大多数列,则可以提高检索速度

SQL> CREATE INDEX comp_index

ON itemfile(p_category, itemrate);

?反向键索引反转索引列键值的每个字节

?通常建立在值是连续增长的列上,使数据均匀地分布在整个索引上

?创建索引时使用REVERSE关键字

SQL> CREATE INDEX rev_index

ON itemfile (itemcode) REVERSE;

SQL> ALTER INDEX rev_index REBUID NOREVERSE;

?位图索引适合创建在低基数列上

?位图索引不直接存储ROWID,而是存储字节位到ROWID的映射

?节省空间占用

?如果索引列被经常更新的话,不适合建立位图索引

?总体来说,位图索引适合于数据仓库中,不适合OLTP中

SQL> CREATE BITMAP INDEX bit_index

ON order_master (orderno);

?基于一个或多个列上的函数或表达式创建的索引

?表达式中不能出现聚合函数

?不能在LOB类型的列上创建

?创建时必须具有QUERY REWRITE 权限

SQL> CREATE INDEX lowercase_idx

ON toys (LOWER(toyname));

SQL> SELECT toyid FROM toys

WHERE LOWER(toyname)='doll';

重建索引

?ALTER INDEX index_name REBUILD [ONLINE] [NOLOGGING] [COMPUTE STATISTICS];

其中:ONLINE使得在重建索引过程中,用户可用对原来

的索引进行修改;

NOLOGGING表示在重建过程中产生最少的重做条目redo

Entry;

COMPUTE STA TISTICS表示在重建过程中就生成了oracle

优化器所需的统计信息,避免了索引重建之后再进行analyze

或dbms_stats来收集统计信息。

删除索引

SQL> DROP INDEX item_index;

?可以将索引存储在不同的分区中

?与分区有关的索引有三种类型:

?局部分区索引-在分区表上创建的索引,在每个表分区上创建独立的索引,索引的分区范围与表一致

?全局分区索引-在分区表或非分区表上创建的索引,索引单独指定分区的范围,与表的分区范围或是否分区无关

?全局非分区索引-在分区表上创建的全局普通索引,索引没有被分区

?与索引有关的数据字典视图有:

?USER_INDEXES -用户创建的索引的信息

?USER_IND_PARTITIONS -用户创建的分区索引的信息

?USER_IND_COLUMNS -与索引相关的表列的信息

SQL> SELECT INDEX_NAME, TABLE_NAME, COLUMN_NAME

FROM USER_IND_COLUMNS

ORDER BY INDEX_NAME, COLUMN_POSITION

Stud_detail Sub_dets

相关主题
相关文档
最新文档