- 浏览: 149958 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
驭乐MJ:
好!谢谢啦!正在学习使用sean中。。
Seam学习笔记 -
laorer:
00 -现在,互联网造就了一批富翁,但那时,似乎什么都不会去想 ...
如果时光能够回流到八年前 -
liuqizhi0925:
八年前,OMG ,能改变的事情真的很多...
如果时光能够回流到八年前
分区表的优势
对于数据库的执行机制还是不大了解,希望专家能通过这些数据给予一些原理上的解释和说明,先谢谢了
分别在分区表和普通表上面 执行语句如下:
SELECT COUNT(*) FROM table_name WHERE column_name='B';
SELECT COUNT(*) FROM table_name WHERE XM LIKE '%亮%';
select count(*) from table_name where column_name like '3702%';
select count(*) from table_name where xm='胡延吉' and xb='1' and column_name='C4';
select count(*) from table_name where xm='胡延吉' and column_name='C4';
select count(*) from table_name where xm='胡延吉' and xb='1';
select count(*) from table_name where xb='1' and column_name='C4';
select count(*) from table_name where column_name='C4';
insert into test select * from table_name where xm='胡延吉';
commit;
delete from table_name where xm='胡延吉' ;
commit;
insert into table_name select * from test;
commit;
truncate table test;
insert into test select * from table_name where column_name='370122873293';
commit;
delete from table_name where column_name='370122873293';
commit;
insert into table_name select * from test;
commit;
truncate table test;
insert into test select * from table_name where column_name='B';
delete from table_name where column_name='B';
commit;
insert into table_name select * from test ;
commit;
truncate table test;
update table_name set csrq=csrq+1;
commit;
update table_name set csrq=csrq+1 where column_name='370122873293';
commit;
select column_name,count(*) from table_name group by column_name;
select column_name,count(*) from table_name group by column_name;
(1)在分区表上面执行的时候,数据库自动的以分区为单位,逐个遍历分区,得到最后结果。遍历分区84回中,最短的为7秒,最长的为300秒,总共用时:49分钟。每次遍历平均时间大约为0.5分钟。
table_name 共有21各分区,619928blocks,其中3个分区无数据,分区segment占用block中最大为75776,最小的为8,平均占用block 34444(没有计算无数据分区),一次遍历过程中读取block最少的是15000,最多的是74971,两次平均为45000。占用cpu大约在20%-70%之间。
(2)在普通表上面执行的时候,数据库则根据执行计划对全表一次遍历,以表为基本单位,执行时间较短,但是占用资源较多,其中一个cpu使用率总在60%左右。执行完上面语句共耗时5小时24分钟。尤其是在批量update,delete的时候,耗时长(占用了测试时间的6个半小时),占用资源持久不能释放,在联机系统下,这个时候不可避免地会有其他用户对数据库进行增删查改操作的时候,很容易出现异常,导致无法程序正确执行。
普通表共300000个block,每次进行遍历的时候都要读取所有的block,耗用资源多,
(3)在执行group by分组查询的时候,分区表耗时12秒,普通表耗时3分50秒
insert into test select * from table_name where column_name='B';执行这个语句耗时6分钟,普通表则耗时19分钟。但是发生的物理读取block数量63236与普通表190175相比相差三倍,但是产生的redo相差不大都在47422.9万。
delete from table_name where column_name='B';执行这个语句耗时9分钟,普通表则耗时110分钟。但是发生的物理读取block数量101549与普通表716569相比相差7倍, redo size:1049412336与普通表相比1545006788相差5亿多。
consistent gets 74191与普通表5504652相比差近80倍。
通过测试,发现分区表的在对批量数据进行操作时,在调节性能,减少资源竞争(从物理文件读取数据到内存、一致性读取数据、cpu使用率、分散i/o),具有明显的优势,数据库能够根据sql语句自动调节,判断是否使用分区索引的情况。但是在按照主键进行精确操作的时候,与普通表相比没有明显优势。
分别在分区表和普通表上面 执行语句如下:
SELECT COUNT(*) FROM table_name WHERE column_name='B';
SELECT COUNT(*) FROM table_name WHERE XM LIKE '%亮%';
select count(*) from table_name where column_name like '3702%';
select count(*) from table_name where xm='胡延吉' and xb='1' and column_name='C4';
select count(*) from table_name where xm='胡延吉' and column_name='C4';
select count(*) from table_name where xm='胡延吉' and xb='1';
select count(*) from table_name where xb='1' and column_name='C4';
select count(*) from table_name where column_name='C4';
insert into test select * from table_name where xm='胡延吉';
commit;
delete from table_name where xm='胡延吉' ;
commit;
insert into table_name select * from test;
commit;
truncate table test;
insert into test select * from table_name where column_name='370122873293';
commit;
delete from table_name where column_name='370122873293';
commit;
insert into table_name select * from test;
commit;
truncate table test;
insert into test select * from table_name where column_name='B';
delete from table_name where column_name='B';
commit;
insert into table_name select * from test ;
commit;
truncate table test;
update table_name set csrq=csrq+1;
commit;
update table_name set csrq=csrq+1 where column_name='370122873293';
commit;
select column_name,count(*) from table_name group by column_name;
select column_name,count(*) from table_name group by column_name;
(1)在分区表上面执行的时候,数据库自动的以分区为单位,逐个遍历分区,得到最后结果。遍历分区84回中,最短的为7秒,最长的为300秒,总共用时:49分钟。每次遍历平均时间大约为0.5分钟。
table_name 共有21各分区,619928blocks,其中3个分区无数据,分区segment占用block中最大为75776,最小的为8,平均占用block 34444(没有计算无数据分区),一次遍历过程中读取block最少的是15000,最多的是74971,两次平均为45000。占用cpu大约在20%-70%之间。
(2)在普通表上面执行的时候,数据库则根据执行计划对全表一次遍历,以表为基本单位,执行时间较短,但是占用资源较多,其中一个cpu使用率总在60%左右。执行完上面语句共耗时5小时24分钟。尤其是在批量update,delete的时候,耗时长(占用了测试时间的6个半小时),占用资源持久不能释放,在联机系统下,这个时候不可避免地会有其他用户对数据库进行增删查改操作的时候,很容易出现异常,导致无法程序正确执行。
普通表共300000个block,每次进行遍历的时候都要读取所有的block,耗用资源多,
(3)在执行group by分组查询的时候,分区表耗时12秒,普通表耗时3分50秒
insert into test select * from table_name where column_name='B';执行这个语句耗时6分钟,普通表则耗时19分钟。但是发生的物理读取block数量63236与普通表190175相比相差三倍,但是产生的redo相差不大都在47422.9万。
delete from table_name where column_name='B';执行这个语句耗时9分钟,普通表则耗时110分钟。但是发生的物理读取block数量101549与普通表716569相比相差7倍, redo size:1049412336与普通表相比1545006788相差5亿多。
consistent gets 74191与普通表5504652相比差近80倍。
通过测试,发现分区表的在对批量数据进行操作时,在调节性能,减少资源竞争(从物理文件读取数据到内存、一致性读取数据、cpu使用率、分散i/o),具有明显的优势,数据库能够根据sql语句自动调节,判断是否使用分区索引的情况。但是在按照主键进行精确操作的时候,与普通表相比没有明显优势。
发表评论
-
高级复制与物化视图的选型
2009-11-07 10:13 3784一、 同步技术的选型 (一) ... -
Timesten for Unix的安装
2009-10-10 17:33 2155下载安装文件 1. 查看系统的具 ... -
多数据库兼容问题
2007-02-23 00:00 1297解决多数据库兼容问题: 解决方案一:(适用于数 ... -
书写历史的甲骨文--ORACLE公司传奇
2007-02-16 00:00 845原文地址:http://www.dbanotes.net/Or ... -
over partition by与group by 的区别
2007-02-09 00:00 2585over partition by与group by 的区别 ... -
ORACLE的锁机制
2007-02-02 00:00 961ORACLE的锁机制 设立封锁机制主要是为了对并发操 ... -
RMAN备份命令[转]
2007-01-19 00:00 11461、切换服务器归档模式 ... -
Oracle启动停止命令
2007-01-12 00:00 1495如果未在环境变量中指定实例名,则lsnrctl命令需要指定实例 ... -
Oracle内存结构[转]
2007-01-05 00:00 1074oracle内存结构 SGA:针对系统的内存空 ... -
Oracle日志文件
2006-12-29 00:00 31661.查询系统使用的是哪一组日志文件:select * from ... -
Oracle日志文件使用小结
2006-12-22 00:00 28711:给日志组1增加重做日志文件. SQL> alter ... -
Oracle入门书籍推荐[转]
2006-12-15 00:00 3117很多朋友要我帮忙推荐一下Oracle的入门书籍,能够了解Ora ... -
Oracle优化笔记2
2006-12-08 00:00 981常用的跟优化有关的数据字典视图 v$sql, ... -
Oracle优化笔记1
2006-12-01 00:00 971Oracle优化笔记 ... -
Oracle维护笔记1
2006-11-24 00:00 1121Oracle维护笔记 ·常用的数据字典视图—— ... -
Oracle开发笔记1
2006-11-17 00:00 922常用脚本: --1. 循环插入测试语句: ... -
Oracle学习笔记2
2006-11-10 00:00 888·MERGE INTO的基本语法 MERGE IN ... -
char、varchar、text、ntext、bigint、int、smallint、tinyint和bit的区别及数据库的数据类型
2006-10-20 00:00 1281Varchar 对每个英文(ASCII)字符都占用2个字节,对 ... -
MySQL 笔记
2006-10-13 00:00 657MySQL 笔记 -
SQL Server存储过程的事务实现
2006-10-06 00:00 1288SQL Server存储过程的事务实现
相关推荐
Oracle分区表详解 大家可以参考下 网上找的资料共享一下
oracle分区表总结oracle分区表总结oracle分oracle分区表总结区表总结oracle分区表总结
oracle 分区表管理oracle 分区表管理oracle 分区表管理oracle 分区表管理oracle 分区表管理
Hash分区是Oracle实现表分区的三种基本分区方式之一。对于那些无法有效划分分区范围的大表,或者出于某些特殊考虑的设计,需要使用Hash分区,下面介绍使用方法
导入导出 Oracle 分区表数据
公司内部培训ORACLE分区表使用的文档
主要介绍了oracle普通表转化为分区表的方法,官方给出了四种操作方法,本文主要对第四种方法进行详细分析,需要的朋友可以参考下。
Oracle 分区表全揭秘 ,非常详细,oracle dba可以看看
分区表类型介绍+各种类型分区表的创建举例
ORACLE分区表操作大全 ORACLE分区表操作大全
本文档详细的讲解了在oracle中如何常见分区表以及遇到的几种问题,希望对大家用帮助
oracle表分区详解
Oracle数据库分区表操作方法Oracle数据库分区表操作方法
深入学习分区表及分区索引(详解oracle分区).docx
Oracle分区表的简单说明以及举例说明其用法
unix AIX 环境下 exp 备份 Oracle 分区表实例
详细讲解oracle分区表的各个步骤和命令
oracle分区表详解 ,包括:什么时候需要分区表、及各类型分区的应用实践
ORACLE 分区表 分区索引 索引分区 实例讲解
1.表空间及分区表的概念 2.表分区的具体作用 3.表分区的优缺点 4.表分区的几种类型及操作方法 5.对表分区的维护性操作