我有一张300万数据的表,是否一定要建立分区?建不建分区和查询速度有没有关系?
谢谢

解决方案 »

  1.   

    RudolfLu大做1. 对一张表建立了分区后,在访问表中数据时是如何操作的。 
    普通表呢像一个小学生用的新华字典,分区表呢像一套博士们辞海,在同一个漂亮的盒子里面(表名)有若干本辞海分册(每一册就是一个分区了)。 
      
    如果说检索一张普通表就像查新化字典,检索分区表就像查辞海了。具体而言呢,又这么几种方式: 
      
    1). 因为你知道你查的内容只会出现在某些分册里面,于是你很快的从辞海盒子里面取出你要的那个册子,不加思索的翻到索引页,根据索引页的指示,你飞快的翻到你的目标页面。取一本本册子呢就叫partition range [inlist] iterator,找索引页当然就是index range scan。如果你不找索引页,准备翻完整本书的找,那就是full table scan了。如果你只找一本册子的,那partition range iterator也就不必了。 
      
    2). 哦,你不知道你要查的内容在那本册子里? 那你只好辛苦一点,翻阅所有册子了。这时,你做的动作就叫partition range all.  而对于每本册子言,也许你会找索引页(index scan),也许你想翻遍全册(full table scan)。 
      
    3). 也许你发现一册册的打开索引页找内容太繁重了,你突然想起来对你的辞海做个整改。于是你把每册的索引页全都拆了下来,专门装订成一册。每次你想利用索引页找东西时,你就打开这个索引册。从索引册,你就可以找到你要内容在哪一册哪个地方。这就是global index scan. 相对于1,2,就叫local index scan. 
      
    4). 你有儿子吗?有一天,你想培训儿子的能力,于是你就找来你儿子给你翻册子,找资料。可是你儿子非得和老子一起找才肯帮你。于是你们父子俩就开始一起检索起辞海来,你查某些册子,他查另一些册子。这就叫partition scan.
    2. 如果建立了分区后,在一个查询中又没用到分区时的条件时,他的操作和没用分区时的操作有何不同? 
    有不同,成本会高一点。 前者是partition range all, 必须一本册子一本册子查过了, 后者就查一个册子了。但是前者并不定会比后者慢,因为前都可以用partition scan.
      

  2.   

    http://www.cnoug.org/viewthread.php?tid=192
      

  3.   

    beckhambobo(beckham) 
    请教
      

  4.   

    300W的表最好建立分区,然后为第个区建立索引,这样可以提高查询速度,也方便数据库的管理。
    work是表名,part1是区名,用的时候只要这样就行了。
    select * from work(part1);