执行SQL 使用分区键检索:
专业从事成都网站设计、做网站,高端网站制作设计,微信小程序,网站推广的成都做网站的公司。优秀技术团队竭力真诚服务,采用H5场景定制+CSS3前端渲染技术,成都响应式网站建设公司,让网站在手机、平板、PC、微信下都能呈现。建站过程建立专项小组,与您实时在线互动,随时提供解决方案,畅聊想法和感受。
select*from 分区表 t where createdate to_date('搜索内容','yyyy-mm-dd') and createdate to_date('搜索内容','yyyy-mm-dd')
执行SQL 不使用分区键检索:
select*from 分区表 t where sms_report_date to_date('2009-07-12','yyyy-mm-dd') and sms_report_date to_date('2009-08-12','yyyy-mm-dd')
执行SQL 使用分区键检索执行计划如下:
SELECT STATEMENT, GOAL = ALL_ROWS
PARTITION RANGE ITERATOR Partition start=2 Partition stop=3
TABLE ACCESS FULL Partition start=2 Partition stop=3
执行SQL 不使用分区键检索执行计划如下:
SELECT STATEMENT, GOAL = ALL_ROWS
PARTITION RANGE ALL Partition start=1 Partition stop=31
TABLE ACCESS FULL Partition start=1 Partition stop=31
Oracle中经常会用到分区查询,按分区查询时,只需要在表名后面通过PARTITION关键字和括号指定分区名字(不能加引号),其它的和非分区的查询没有什么区别。如下是一个例子:
分区表的数据量一般都比较大,有时候,某些查询必须指定分区才能查出来。但是,分区查询的结果,并不直观。为此,我们需要将这些不直观的结果组织在一起。
抽象一下,实际上这个问题是,如何通过SQL查询将零散的值,组织成行和列的形式。
在实际中,这个问题,我并没有一下反应过来。实际上,大概来讲这个分两步考虑:先组织列,假设有两个值,因为单个的值只有一行,分别放在不同的表中,取不同的列别名,两个表连接不带条件(笛卡尔积),就得到了一个一行两列的表;再组织行,不同的行合并只需要统一好列名,然后做 union all 就好了。
为了方便区别,在每一行中可以再加一列,作为每一行的标识。下面是一个示意结果:
查看当前用户下的分区表:
select * from user_part_tables ;
或者下面的语句可以:
select * from dba_part_tables where owner ='scheme名称' ;
dba_part_tables表是sys用户下的表。
要想查看表分区的名称:
select partition_name from user_segments where segment_type='TABLE PARTITION' and segment_name='表名';
或者下面的语句可以:
select * from dba_part_col_statistics where lower(table_name)= '表名';
dba_part_col_statistics表是sys用户下的表。
oracle查询分区表的数据的时候默认查询B分区。oracle中是根据分区键决定的,分区键有可能是通过某一个函数算出来的。Oracle的表分区功能通过改善可管理性、性能和可用性,从而为各式应用程序带来了极大的好处。通常,分区可以使某些查询以及维护操作的性能大大提高。
查分区表user_tab_partitions,或者user_segments,或者user_objects都行。
个人感觉user_tab_partitions比较好。
至于6个月之前,可以用sysdate和add_months来做,然后再to_char截取,就行