①高效的分区消除
分区表存在的最大意义在于,可以有效地做到分区消除
分区表其实是将一个大对象分成了多个小对象
测试针对普通表的增加了 area_code 条件的相同 SQL 语句:
分区表应用在大表上更合适,至少要大于100万条记录的表方可考虑.
在数据量变的很大的情况下,可以考虑表压缩,减少磁盘的存储,减少buffer cache的消耗,加快查询的速度,压缩需要在数据加载和dml的时候消耗一些cpu.表压缩对于应用是透明的.
你可以在表空间,表或分区级别指定压缩,如果在表空间级别指定压缩,那么这个表空间中的所有表默认都是压缩的.
压缩会发生在数据插入,更新或批量加载到表时.有几种类型的压缩.基本的,oltp的,dss的,归档的.他们的cpu消耗见文档.
当使用基本压缩,数据仓库压缩,或归档压缩的时候,压缩仅仅是在批量加载到一个表的时候发生.当你使用了oltp压缩,压缩发生在数据插入,更新,批量加载.
如果你使用了alter table命令让表启用压缩,那么对于已存在的数据是不受影响的,只有在启用压缩后的插入,或更新会受影响.也可以使用ALTER TABLE...NOCOMPRESS将一个表设置成非压缩,对于已经的压缩的表是没有影响的,压缩的数据还是压缩的,只是新插入的数据是不被压缩.
创建一个oltp压缩类型的表
CREATE TABLE orders ?... ?COMPRESS FOR OLTP;
CREATE TABLE sales_history ?... ?COMPRESS BASIC;
CREATE TABLE sales_history ?... ?COMPRESS;
下面的表是一个数据仓库压缩类型的表,对于经常查询,并且没有dml的表适用.
CREATE TABLE sales_history ?... ?COMPRESS FOR QUERY;
创建一个归档压缩类型的表
CREATE TABLE sales_history ?... ?COMPRESS FOR ARCHIVE;
表可以包含压缩和非压缩的分区,并且不同的分区的压缩的类型可以是不同的,如果在分区上指定的压缩的类型与表上指定的压缩的类型不同,那么分区上的优先.
查看表是否是压缩的,及分区是否是压缩的.
SQL SELECT table_name, compression, compress_for FROM user_tables;
SELECT table_name, partition_name, compression,compress_for
FROM user_tab_partitions;
查看表中的行是什么压缩类型
SELECT DECODE(DBMS_COMPRESSION.GET_COMPRESSION_TYPE(
ownname = 'HR',
tabname = 'EMPLOYEES',
row_id ?= 'AAAVEIAAGAAAABTAAD'),
①., ?'No Compression',
'Unknown Compression Type') compression_type
FROM DUAL;
修改压缩的级别
如果表是分区表,使用在线重定义可以修改表的压缩级别.如果表是分分区表,那么可以使用alter table ..move.. compress for语句修改表的压缩级别,这个语句会阻塞dml操作.
对于压缩表的限制:
①.基本压缩,你不能为添加的列指定默认的值.删除列是不被支持的.
在上面的描述中可以看到对于基本类型的压缩,没有使用直接路径插入的行及更新的行是不会被压缩的.对于我们的oltp系统基本是没有用处的,只测试下oltp的压缩方式,这种方式对于没有使用直接路径插入的行及被更新的行都会压缩.
COUNT(*)
SQL set serveroutput on
一.表分区策略
①识别大表
采用ANALYZE TABLE语句进行分析,然后查询数据字典获得相应的数据量.
可根据月份,季度以及年份等进行分区;
要对每个表空间的大小进行估计
二.创建表分区
a.创建范围分区的关键字是'RANGE'
①范围分区
create table ware_retail_part --创建一个描述商品零售的数据表
(
id integer primary key,--销售编号
retail_date date,--销售日期
)
partition by range(retail_date)
);
三.创建索引分区
索引分区分为本地索引分区和全局索引分区,全局索引不反应基础表的结构,要分区只能进行范围分区.
创建索引分区要参照表分区
四.分区技术简介
优点:
①减少维护工作量
五,管理表分区
①添加表分区
ALTER TABLE...ALTER PARATITION
ALTER TABLE...DROP PARTITION
删除分区时,里面的数据也会被删除.
-创建表和分区
create table sales--创建一个销售记录表
id number primary key,--记录编号
saledate date--销售日期
partition by range(saledate)--按照日期分区
--第一季度数据
--第二季度数据
--第三季度数据
--第四季度数据
--创建局部索引
local(
partition part_seal tablespace tbsp_1,
--并入分区
--重建局部索引
六.管理索引分区
删除索引:DROP PARTITION
重建分区:REBUILT PARTITION
更名索引分区:RENAME PARTITION
分割索引分区:SPLIT PARTITION
不应该吧,我这边版本Oracle11g,测试没有问题.步骤如下:
create?index?objects1_idx?on?objects1?(object_id)?compress?1;
object_id?number,
partition?by?range(object_id)
以上就是土嘎嘎小编为大家整理的oracle怎么压缩分区相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!