为了提高数据库的查询速度,我准备建立partition!
但是否必须要显式的写出所查询的partition名字才能获得最佳的速度
如:select * from TBL partition (p1);
而我想问的是如select * from TBL where ....
这样的没有指明partition名的sql在建立了partition速度是否会自然提高(不用
修改任何代码)
请赐教! 

解决方案 »

  1.   

    我认为,数据库会根据默认的partition进行处理的,所以只要你建立了,就会有效果
      

  2.   

    指定partition要快很多,上千万的记录的表,曾经用过,在查询程序中显式指定,速度大幅提高
      

  3.   

    select * from partitioned_table partition (pNNN)
    where partition_column >= {your midpoint value};
    显式指定理论上简化oracle的语法分析,应该快。
      

  4.   

    查询的from clause中加不加partition意义是完全不同的:加上partition实质上是在where条件中隐含了partition的where条件,oracle只返回在该partition中满足条件的纪录;而不加partition则表示返回整个表中满足where条件的纪录。
    只有一种情况下两者的返回结果是相同的:当满足条件的纪录存在而且只存在于被指定的那个partition中。举例如下:table: test (col1)
    part1: col1 <10
      records:  5,6,7,8,9,10
    part2: col1 between <20
      records:  11,12,13查询一:select * from test partition(part1) where col1 between 7 and 12;将返回纪录7,8,9,10
    查询二:select * from test where col1 between 7 and 12;则会返回纪录7,8,9,10,11,12
    其实查询一等价于:
    select * from test partition(part1) where col1 between 7 and 12 and col1 <10;查询三:select * from test partition(part1) where col1 between 7 and 9;将返回纪录7,8,9
    查询四:select * from test where col1 between 7 and 9;和查询三相同,也将返回纪录7,8,9
    查询三和查询四相同是因为所有的纪录都在一个partition中所以脱离了查询的逻辑谈效率是没有意义的。