来说几句吧,支持一下飞虎兄:其实分区的用处在于呢,当你的库有一个特大的表时,而的访问又特不集中,或者你苦于这个表的查询速度时,这时你就对这个表进行分区了。1、相对于普通表来说,cpu不会带来查询速度的提高,不过你可以在做select等操作时使用"parallel" HINT,来使多cpu共同作业。
2、简明一点说,数据库其实影响性能的最主要的问题就是io的问题,无论的调内存,使用索引,想解决的归根结底也都是减少io,分区表相对于普通表,最大的优点是每个分区都相当于一个变通表,每个分区都可以建在自己的表空间上,而每个表空间呢又可以选择建在哪个盘上,这样就把io均分开,当你进行查询就加快了读写速度。
3、你所说的几种方法,我认为B与C更可取,A我并不测试过,不过自我感觉可能会有问题,要想更好的发挥分区的功能,我认为C方法更可取一些。
其实建分区最关键的问题是你按什么分区,也就是分区键的设计问题,设计分区键时,一定要使每个分区的数据尽量均匀分布,这样可以提高速度,避免io冲突和热点。 

解决方案 »

  1.   

    多口说多一句,绝对赞同hrb_qiuyb(大森林) 第二点。
    每个分区都可以建在自己的表空间上,这一点根本上已解决同一时间访问一个焦点说法,也就是增大访问量同一地方,而每一空间可设置数据文件的不同物理路径(这样只是机器性能问题),对于大型表查询速度绝对有好处.
      

  2.   

    A.EXPORT,IMPORT方法我用过,只要表空间和各个分区都是正常的没有问题,表空间的正确存在很重要,因为分区式指定表空间的
      

  3.   

    我觉得 hrb_qiuyb(大森林) 说的很对,但是太偏重于均衡I/O了,分区表目的是要获得分表的性能,以一个大表的形式存在,而获取小表的性能,这是最重要的,我不否认他可以均衡I/O,但我觉得它是主要的。
      The Oracle server can explicitly recognize partitions and subpartitions. Oracle uses this knowledge to optimize SQL statements by pruning unnecessary partitions or subpartitions. For example, if a query only involves Q1 sales data, there is no need to retrieve data for the remaining three quarters. Such intelligent pruning can dramatically reduce the data volume, resulting in substantial improvements in query performance. 
      If the optimizer determines that the selection criteria used for pruning are satisfied by all the rows in the accessed partition or subpartition, it removes those criteria from the predicate list (WHERE clause) during evaluation in order to improve performance
      这是文档里面的一段话。服务器可以清楚辨别分区,查询的时候仅限于这个分区。  实际应用中,RAID技术可以均衡I/O, 分区表还是可以提高性能。
      

  4.   

    好,我想如果查询的范围仅限于分区表的一个分区,那么用分区表可能会极大的提高效率
    (因为ORACLE不用去SCAN其他的分区.
      

  5.   

    搂主说得没错,分区表的功能主要就是缩小查询范围,减少扫描全表的时间,如果你有些数据是很久的,肯定不会用的,你还可以offline这个分区
      

  6.   

    比较同意maohaisheng(www.chinaspirit.net) 的看法,大表的形式来获得小表的效率。
    另外觉得使用分区关键还是看应用,如何进行设计,怎么分区,索引如何创建?
    不知有没有谁有实际应用方面的经验,一起分享?
      

  7.   

    我使用的分区的一个例子:  一个批发公司有13各分公司,各有应收帐,设计的时候就是未回款的大量销售流水(回款的也不转走),每天总的流水在3万-5万之间,结帐的时候有统一结的方式,也有各自分公司结帐的方式,换句话说,总公司的用户和分公司的用户都有增/删/改的权限。而且结帐基本使用一份程序(只有细节变化)。
      看了需求,大家可能都知道,用分表实现比较困难(因为统一结帐的时候,会忽略部门信息)。
      只有用分区了,分了14个区(有一个是结算中心的区)。每个分区有local index,大表有全局索引。把每个分区授权给分公司用户。
      分公司性能不错。结算中心有一小部分查询的时候,比较慢,这是没有办法的,一个是结算逻辑复杂,一个特别大的SQL,程序只有一份,不可能专门针对这个部分来重写SQL
      但是他们也还满意。
     写这么多,我不知道说清楚没有。唉,我的文笔!差!
      

  8.   

    补充:分区表的版本支持:
     oracle8.0.3(beta) 只在Enterprise Version中有效
      

  9.   

    以上说的都有道理,io是决定速度的主要原因
    如果你查询的条件是分区字段,oracle仅仅需要在一个分区寻找数据时,速度会有很大提高,如果按照其他条件检索,速度不会有什么改善。
    分区表的数据量都比较大,如果有可能,在创建表的时候可以采用nologging
    然后用 append的方法装载数据,速度会快很多