文档库 最新最全的文档下载
当前位置:文档库 › oracle优化策略之表分区

oracle优化策略之表分区

---》
表级锁 : 一致性,一次只允许修改一个用户修改
LOCK TABLE table_name IN mode MODE;

---》
行级锁 : 对被修改的行进行锁定,其他用户可以访问其他行
行级锁是一种排他锁,防止其他事务修改此行;
在使用 insert update delete select...for update Oracle会自动应用行级锁。
select ...for update 语句允许用户一次锁定多条记录进行更新;
使用commit,rollback 语句释放锁。
---select * from order_master where vencode='1111' for update of odate,del_date;
update order_master set del_date='28-8月-05' wehre vencode='1111';
commit;



---》
表分区:将一个表分成多个区
查询可以只访问表中特定的分区
将不同的分区存储在不同的磁盘,提高访问性能和安全性
可以独立的备份和恢复每个分区


(范围分区):以表中的一个列或一组列的值的范围分区
PARTITION BY RANGE(COLUMN_NAME)
(
PARTITION part1 VALUE LESS THAN (range1)
PARTITION part2 VALUE LESS THAN (range2)
PARTITION part... VALUE LESS THAN (MAXVALUE)
);
--**例子
CRREATE TABLE SALES(id number(10),cost number(10))
PARTITION BY RANGE(cost)
(
PARTITION p1 VALUE LESS THAN (1000)
PARTITION p2 VALUE LESS THAN (2000)
PARTITION p3 VALUE LESS THAN (MAXVALUE)
);


(散列分区) :不具有逻辑范围的数据进行分区;
通过在分区键上执行HASH函数决定存储的分区
将数据平均的分布到不同的分区
PARTITION BY HASH(column_name)
PARTITIONS number_of_partitons;
或者
PARTITION BY HASH(column_name)
(
PARTITION part1 [TABLESPACE TBS1]
PARTITION part2 [TABLESPACE TBS1]
...
PARTITION partN [TABLESPACE TBS1]
);
--**例子
CREATE TABLE Employee
(
E_ID number(5),
E_Name varchar(20),
Department varchar2(10)
)
PARTITION BY HASH(Department)
(
Partition d1
Partition d2
Partition d3
...
Partition dN
);
或者
PARTITION BY HASH(Department)
PARTITIONS 4;

(列表分区):将不相关的数据组织在一起
PARTITON BY LIST()
(
PARTITION part1 VALUES(values_list1),
PARTITION part2 1VALUES(values_list2),
...
PARTITION partN VALUES(DEFAULT)
);
--**例子
CREATE TABLE Employee
(
E_ID number(4),
E_Name varchar2(14),
E_Address vardchar2(15)
)
PARTITION BY LIST(E_Address)
(
Partition north values('芝加哥'),
Partition westvalues('旧金山','洛杉矶'),
....
);

(复合分区) :范围分区 与 散列分区 或 列表分区 的组合
PARTITION BY RANGE(column_name1)
SUBPARTITION BY HASH(column_name2)
SUBPARTITION number_of_partitions
(
PARTITION part1 VALUE LESS THAN(range1),
PARTITION part2 VALUE LESS THAN(range2),
...
PARTITION partN VALUE LESS THAN(MAXVALUE)
);

CREATE TABLE SALES
(
--**例子
P_ID number(11),
SALES_DATE DATE NOT NULL,
SAL

ES_COST VARCHAR2(10)
)
PARTITION BY RANGE(SALES_DATE)
SUBPARTITION BY HASH (SALES_COST)
SUBPARTITIONS 5
(
PARTITION s1 VALUES LESS THAN (TO_DATE('01/4月/2001','DD/MOD/YYYY')),
PARTITION s2 VALUES LESS THAN (TO_DATE('01/7月/2001','DD/MOD/YYYY')),
PARTITION s3 VALUES LESS THAN (TO_DATE('01/9月/2001','DD/MOD/YYYY')),
PARTITION s4 VALUES LESS THAN (MAXVALUE)
);

--使用分区
select * from tablename partition (分区名)
delete from tablename partition (分区名)
insert into tablename values (.....);

--添加分区,在最后一个分区之后添加新分区
ALTER TABLE table_name ADD PARTITION part? VALUES LESS THAN (value);
--删除分区,分区的数据也随之删除
ALTER TABLE table_name DROP PARTITION part?;
--截断分区,删除指定分区中的所有记录,不可以恢复
ALTER TABLE table_name TRUNCATE PARTITION part?;

--合并分区,将范围分区或复合分区的两个相邻分区连接起来
ALTER TABLE MERGE PARTITIONS S1,S2 INTO PARTITION S2;
--拆分分区,将一个大分区中的记录拆分到两个分区中
ALTER TABLE table_name SPLIT PARTITION P2 AT (1500) INTO (PARTITION P21,PARTITION P22);

相关文档