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,
  SALES_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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值