不用这么写,oracle具有分区裁剪功能,就是说oracle会根据值的范围自动获取数据;
建议在查询时在sqlplus里打开autotrace功能,看看sql的执行路径

解决方案 »

  1.   

    to shadowfalao():  也就是说,我这句查询:
          select * from t1 Partition(part20040621) where tid = '2004062112121299999999';和这句:
         select * from t1 where tid = '2004062112121299999999';效率是一样的?
      

  2.   

    帮你顶
    好像Oracle区很少高手,呵呵
      

  3.   

    shadowfalao() 和iihero(阿黑哥)说法不一样!
      

  4.   

    应该是不用加入分区名称的,oracle会根据你的分区规则自动的在数据所在分区中进行查找
      

  5.   

    以12个分区为例:
    1.select * from t1 where tid = '2004062112121299999999';
      此时SQL查询语句并没有指定分区名称及分区字段,没有给Oracle提供快速定位分区的必要条件,Oracle不可能知道要在哪个分区中进行查找,范围为1-12;
    2.select * from t1 Partition(part20040621) where tid = '2004062112121299999999';
      指定分区名称,快速定位分区part20040621,只在该分区内进行查找;
    3.select * from t1 where tid = '2004062112121299999999' and pdate='20040621';
      指定分区字段,此时Oracle会根据pdate的值快速定位分区part20040621,只在该分区内进行查找;
      本人并没有发现在效率上和2有太大区别,但可操作性和可维护性要胜过2;
      

  6.   

    我也觉得skystar99047(天星) 说的有道理。