上周我写了一篇博文,里面有一点关于分区表的论述(http://www.cnblogs.com/wingsless/archive/2012/02/04/2338292.html)。但是我发现我少写了一点,在你的查询条件和分区列没有太大关系的时候,分区表不会帮助你提高效率。
图1
图2
我是按照area_id分区的,图1的执行计划:
图2的执行计划:
建立一张表,这张表的数据和test一样,但是没有分区,执行一下图1中的语句,查看其执行计划:
可以明显的看出来,分区表的执行计划多了一个PARTITION LIST ALL,明显增加了CPU的耗用。再看看图2中SQL在test111中执行的执行计划吧:
确实很明显,这里少了PARTITION LIST SINGLE,但是CPU的耗用却没有变,当然了,我这个表非常非常小,如果数据量超过千万级,那么就能看出好处了。
从上述对比中可以很明显的看出来,分区表的使用是要看实际应用的需求的。如果存储过程始终是按照某一条件对数据进行查询,就像是图2中那样,每次查询的时候总是要带上area_id,那么建表的时候就可以考虑按照area_id进行分区。但是如果你平时的查询没有什么规律可循,那么你分区了,也许好心办坏事。
为了这篇博文,小弟在此豁出去了,不停地插表,现在搞出了一张3145728的test表和test111表,两个表数据一样,test有分区,test111没有。再看看执行计划,首先是SQL:
SELECT * FROM TEST a WHERE a.item_id = 1
AND a.area_id = 290;
SELECT * FROM TEST111 a WHERE a.item_id = 1
AND a.area_id = 290;
然后是执行计划:
1
2
看看,用了分区表之后虽说CPU的COST增加了,但是ROWS和BYTES都有了十分可观的降低。再将表扩大一倍,分区表和非分区表的ROWS比达到了2159K:10M,而BYTES比也达到了 121M:594M,CPU COST比:14487:8847。上帝啊,分区表在降低读取量方面堪称出色,但是在增加CPU COST方面堪称令人发指。
以前看过盖国强的书,里面说优化SQL主要是降低其物理读。但是我想如果能降低这里的ROWS和BYTES,对于一个小机环境的数据库处理器来说,高一点的CPU COST也是可以理解的吧。
有什么不妥之处,请大家留言指正。
发表评论
-
简介如何查看执行计划以及执行计划的准确性
2012-02-24 20:52 0很多朋友都问过我优化SQL的事情。我觉得在我不 ... -
一周以来遇到的问题和经验(oracle)
2012-02-18 22:23 906很久以前,在我还在X唐电信的时候,我被领导要 ... -
对WITH和from(select ...)的一点比较
2012-02-04 21:24 736在之前的工作中,我曾经遇到过表特别大的 ... -
使用WITH提高查询效率
2012-01-15 21:02 1133前两天的业务 ... -
好用的函数sign和decode
2012-01-08 00:11 793今天遇到了一个问题,需要对比一个字段和5的大 ... -
有关LGWR
2011-12-28 21:37 923今天群里有人问关于数据库进程的事情,当然,他对 ... -
安装oracle时还需要修改的几个文件和参数
2011-12-24 23:31 902安装oracle时还需要修改的几个文件和参数: /et ... -
关于oracle的启动
2011-12-24 22:51 607有这么一道题,是关于在实例启动的时候,哪些 ... -
实用语句之一——Oracle建立Database Link
2011-12-18 12:56 817create database link dblink_ ... -
Oracle控制文件的一点研究
2011-12-13 23:15 641控制文件是非常重要的文件,实例读取控制文件才 ... -
SQL语句的执行过程
2011-12-13 21:20 757服务器接收到SQL语句之后,要经过如下步骤完成操作:P ... -
OCP题库笔记1z0-052
2011-12-12 23:24 10691 关于undo 数据库可以有一个以上的undo表空间; ... -
有关nologging和append提高插入效率的研究
2011-12-11 10:39 2080那天接到一个事情,我们的数据库表空间已经快用完 ... -
计算索引碎片的一个脚本
2011-12-11 10:36 581今天在网上看到了一个估计索引碎片的方法,所以写了个小 ... -
索引不可用的情况
2011-12-11 10:35 703有一天我遇到了一个同事的求助,他让我帮忙优化一个SQ ... -
如何理解oracle实例(instance)和数据库(database)的概念
2011-12-11 10:34 696今天群里有朋友问什么是instance,什么是data ...
相关推荐
分区表的修复分区表的修复分区表的修复分区表的修复
《JCR期刊影响因子及分区情况》是由中国科学院文献情报中心按年度和学科根据SCI期刊的影响因子对SCI期刊进行4个等级划分的分区表。 目前SCI核心库有3762种期刊,扩展库(网络版)有6089种期刊,SCI库的期刊质量和...
关于分区表 ORACLE 关于分区表 ORACLE 关于分区表 ORACLE
MS SQL Server:分区表、分区索引 详解 1. 分区表简介 使用分区表的主要目的,是为了改善大型表以及具有各种访问模式的表的可伸缩性和可管理性。 大型表:数据量巨大的表。 访问模式:因目的不同,需访问的...
BLOG_如何将一个普通表转换为分区表.pdfBLOG_如何将一个普通表转换为分区表.pdf
硬盘分区表详解 硬盘分区表详解 硬盘分区表详解 硬盘分区表详解
深入浅出硬盘分区表深入浅出硬盘分区表深入浅出硬盘分区表
主要介绍了oracle普通表转化为分区表的方法,官方给出了四种操作方法,本文主要对第四种方法进行详细分析,需要的朋友可以参考下。
恢复分区表问题恢复分区表问题恢复分区表问题恢复分区表问题
一个大型表的分区表改造方案以及详细步骤。
我自己做的一个表格,基于海思hi3516C板子,MTD分区表。对于一些不会怎么修改内核大小以及文件大小后,怎么调整MTD表很有帮助哦。
CW M301Hv300分区表.rar
硬盘分区表详解硬盘分区表详解硬盘分区表详解硬盘分区表详解
易我分区表医生--重建损毁的分区表,带注册文件
项目中有需求要垂直分表,即按照时间区间将数据拆分到n个表中,PostgreSQL提供了分区表的功能。分区表实际上是把逻辑上的一个大表分割成物理上的几小块,提供了很多好处,比如: 1、查询性能大幅提升 2、删除历史...
Oracle分区表详解 大家可以参考下 网上找的资料共享一下
魔百和M301H_CW2的分区表信息,救砖需要用的下载后自己根据信息建分区表。
oracle expdp impdp 分区表重映射导出导入 数据迁移方案,以SI01用户为例子,将用户分区表导出后,将分区表重映射到新的表空间,完成数据迁移和检查。照方案例子按步去做,一定能成功。
db2分区表在线迁移 db2分区表在线迁移 db2分区表在线迁移
FAT32文件分区表说明 FAT32文件分区表说明