- 浏览: 156069 次
- 性别:
- 来自: 广州
-
文章分类
最新评论
-
驭乐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 3899一、 同步技术的选型 (一) ... -
Timesten for Unix的安装
2009-10-10 17:33 2236下载安装文件 1. 查看系统的具 ... -
多数据库兼容问题
2007-02-23 00:00 1354解决多数据库兼容问题: 解决方案一:(适用于数 ... -
书写历史的甲骨文--ORACLE公司传奇
2007-02-16 00:00 893原文地址:http://www.dbanotes.net/Or ... -
over partition by与group by 的区别
2007-02-09 00:00 2654over partition by与group by 的区别 ... -
ORACLE的锁机制
2007-02-02 00:00 1038ORACLE的锁机制 设立封锁机制主要是为了对并发操 ... -
RMAN备份命令[转]
2007-01-19 00:00 11801、切换服务器归档模式 ... -
Oracle启动停止命令
2007-01-12 00:00 1547如果未在环境变量中指定实例名,则lsnrctl命令需要指定实例 ... -
Oracle内存结构[转]
2007-01-05 00:00 1136oracle内存结构 SGA:针对系统的内存空 ... -
Oracle日志文件
2006-12-29 00:00 32021.查询系统使用的是哪一组日志文件:select * from ... -
Oracle日志文件使用小结
2006-12-22 00:00 29141:给日志组1增加重做日志文件. SQL> alter ... -
Oracle入门书籍推荐[转]
2006-12-15 00:00 3162很多朋友要我帮忙推荐一下Oracle的入门书籍,能够了解Ora ... -
Oracle优化笔记2
2006-12-08 00:00 1033常用的跟优化有关的数据字典视图 v$sql, ... -
Oracle优化笔记1
2006-12-01 00:00 1050Oracle优化笔记 ... -
Oracle维护笔记1
2006-11-24 00:00 1191Oracle维护笔记 ·常用的数据字典视图—— ... -
Oracle开发笔记1
2006-11-17 00:00 974常用脚本: --1. 循环插入测试语句: ... -
Oracle学习笔记2
2006-11-10 00:00 962·MERGE INTO的基本语法 MERGE IN ... -
char、varchar、text、ntext、bigint、int、smallint、tinyint和bit的区别及数据库的数据类型
2006-10-20 00:00 1376Varchar 对每个英文(ASCII)字符都占用2个字节,对 ... -
MySQL 笔记
2006-10-13 00:00 697MySQL 笔记 -
SQL Server存储过程的事务实现
2006-10-06 00:00 1340SQL Server存储过程的事务实现
相关推荐
Oracle分区表中的Hash分区是一种基于哈希算法的分区策略,适用于处理无法清晰定义分区范围的大型数据表。这种分区方式通过计算分区键的哈希值来决定数据存储在哪个分区,以此达到数据分散和负载均衡的目的。Hash分区...
- **Oracle分区表优势**: 分区表可以将大数据集分解成较小的、更易于管理的部分,显著提升数据读写性能,特别是在数据量巨大的情况下。 - **定期备份的重要性**: 定期备份是数据安全的重要保障,尤其对于关键业务...
当表的大小超过2GB时,官方推荐使用分区表,因为它们在处理大量数据时具有显著优势。本文将详细介绍如何通过在线重定义(DBMS_REDEFINITION)将普通表转换为分区表,这是官方给出的四种方法之一,且对系统的影响最小...
下面我们将深入探讨Oracle分区表和锁的应用。 一、Oracle分区表 1. **分区概念**:Oracle分区表是将一个大表逻辑上划分为多个较小的部分,每个部分称为一个分区。每个分区都有自己的索引和维护操作,这使得对大...
- 分区表的管理可能比非分区表复杂,尤其是当涉及到大量分区时。 - 对于频繁更改分区键的场景,分区表的维护成本较高。 #### 四、分区类型及示例 ##### 1. 范围分区 范围分区是根据一个列的值的范围来决定数据存储...
以下是对Oracle分区表和分区索引的深入解析: 1. **何时使用分区**: - 当表的数据量超过2GB时,分区有助于避免32位操作系统下的文件大小限制,同时减少大规模数据的备份时间。 - 对于包含历史数据的表,如按月份...
### 深入学习Oracle分区表 在Oracle数据库管理中,分区是一种重要的技术手段,能够显著提升大型数据集的查询性能...通过深入理解Oracle分区表的原理和实践技巧,可以更好地发挥其优势,为业务发展提供强大的技术支持。
### Oracle 分区表详解 #### 一、Oracle 分区简介 Oracle 的分区技术是一种用于管理和优化超大型表和索引的有效手段。通过将一个大型表分解成多个较小且易于管理的部分,即分区,可以显著提升数据库性能、可用性和...
### ORACLE-分区表的用法 #### 1. 表空间及分区表的概念 - **表空间**:表空间是Oracle数据库中的基本存储单元,它由一个或多个数据文件组成,用于存储数据库中的所有数据对象(如表、索引等)。在Oracle中,所有...
总结来说,Oracle分区表是解决大数据处理问题的有效工具。通过合理地设计和使用分区,可以显著提升数据库性能,降低维护成本,提高数据处理效率。在实践中,根据业务需求选择合适的分区策略,是实现高效数据库管理的...
**文档目的**:本文档旨在明确Oracle分区表的概念,并针对特定业务场景(例如“长安”场景)介绍如何构建分区表。 **阅读对象**:主要包括项目开发人员、项目实施人员及项目设计人员。 **参考文档**:未提供具体...
**1.1 分区表的优势** - **数据保护与隔离**:由于数据被分散存储在不同的分区中,这降低了数据损坏的风险。 - **高效的备份与恢复**:可以单独备份或恢复某个分区,而不必处理整个表。 - **提高 I/O 性能**:通过...
在分区表上创建本地索引时,每个分区都有自己的索引,这在处理大量数据的滚动窗口操作(如添加新数据并移除旧数据)时非常高效,允许快速加载和删除而不影响其他分区。 6. **分区维护** 分区提供了灵活的数据管理...
#### 二、Oracle分区表的优势 1. **增强可用性**:如果表的某个分区出现故障,表在其他分区的数据仍然可用。 2. **维护方便**:当表的某个分区出现故障时,只需要修复该分区即可,而不必影响整个表。 3. **均衡I/O*...
针对分区表,Oracle 提供了分区索引,它允许索引与分区策略相结合。例如,可以创建局部索引,每个分区都有自己的索引,或者创建全局索引,覆盖所有分区。局部索引通常在查询性能上有优势,而全局索引则适用于跨分区...
在实际应用中,还需要关注分区表的索引、物化视图、分区维护操作(如添加、合并和拆分分区)等方面,以确保系统性能和可维护性。 总结来说,Oracle表分区是大型数据库系统中的重要优化手段,通过合理规划和应用,...
通过以上内容,我们可以了解到Oracle数据库分区表的基本操作和优势,这为大数据量的管理和查询提供了有效的解决方案。在实际应用中,根据业务需求选择合适的分区策略,能够极大提升数据库的性能和管理效率。
6. **全局索引分区**:当对分区表创建索引时,可以选择创建全局索引,索引覆盖所有分区,或者创建局部索引,每个分区有自己的索引。 二、分区优势 1. **性能提升**:通过只扫描与查询条件相关的分区,显著减少I/O...