关于分区表的问题

Corn1 2016-02-16 01:45:41
两张表,部分字段不同,但建的索引、主键相同,而且都是按照日期来分区。
相同的一条SQL语句:
select ObjectNumber,ObjectName,StartTime from T_M_SectorDOHour
where (ObjectNumber in (select oid from mod_negroup_info where group_id=186544))
and (CityID=12101) and (trunc(StartTime)=to_date('2016-02-15','yyyy-mm-dd'))
其执行计划:
SELECT STATEMENT, GOAL=ALL_ROWS
NESTED LOOPS
PARTITION RANGE ALL
TABLE ACCESS FULL T_M_SECTORDOHOUR
INDEX UNIQUE SCAN PK_MOD_NEGROUP_INFO
看上去貌似没问题。
但另一张表,相同的SQL语句,表名换一下,其执行计划变成了:
SELECT STATEMENT, GOAL=ALL_ROWS
NESTED LOOPS
NESTED LOOPS
INDEX FAST FULL SCAN PK_MOD_NEGROUP_INFO
INDEX RANGE SCAN IDX_T_M_SECTOR1XHOUR1_OBJECT
TABLE ACCESS BY GLOBAL INDEX ROWID T_M_SECTOR1XHOUR
貌似进行了全表扫描,没有用到分区。
但第二张表的索引都是VALID的。

索引如下:
IDX_T_M_SECTOR1XHOUR1_OBJECT Normal OBJECTNUMBER
IDX_T_M_SECTOR1XHOUR1_TIME Normal STARTTIME
T_M_SECTOR1XHOUR1_PRIMARY Unique OBJECTNUMBER, STARTTIME, CITYID

如果我直接改成查分区,应该可以。但如果要查多天估计就...
请求各位大侠帮忙
...全文
241 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
beyon2008 2016-02-17
  • 打赏
  • 举报
回复
analyze table table_name compute statistics;
Corn1 2016-02-17
  • 打赏
  • 举报
回复
又发现一个新的现象: 查询里面,如果带上OBJECTNUMBER这个索引列,就不行。其他没有建索引的列,就是正常的,能按分区来查。 这又是为什么呢...
Corn1 2016-02-17
  • 打赏
  • 举报
回复
分区的统计信息看上去也是正常的: PARTITION_NAME NUM_ROWS BLOCKS EMPTY_BLOCKS AVG_SPACE P20160214 244560 7930 0 0 P20160215 244560 7930 0 0
Corn1 2016-02-17
  • 打赏
  • 举报
回复
又试了一下,第二张表中,如果把(ObjectNumber in (select oid from mod_negroup_info where group_id=186544))这个条件去掉,分区就正常的。难道跟多表查询有关?但第一张表可以多表查询的啊...
卖水果的net 2016-02-16
  • 打赏
  • 举报
回复
引用 5 楼 Corn1 的回复:
请问怎么收集?


SQL>exec dbms_stats.gather_table_stats(user,'t_name',cascade => true) ; 

ORAClE SE 2016-02-16
  • 打赏
  • 举报
回复
收集一下第二张表统计信息。
Corn1 2016-02-16
  • 打赏
  • 举报
回复
请问怎么收集?
卖水果的net 2016-02-16
  • 打赏
  • 举报
回复
收集一下第二张表统计信息。
Corn1 2016-02-16
  • 打赏
  • 举报
回复
问题归纳为: 我从A表复制了一样的表到B表,包括表结构、分区、索引。 然后insert into B select * from A where ... 现在发现,B表的分区无效。
Corn1 2016-02-16
  • 打赏
  • 举报
回复
但是对于后表,如果没有查询条件,只是指定分区: select * from T_M_Sector1xHour partition(P20160215) 执行计划又是正确的:PARTITION RANGE SINGLE 搞不懂
Corn1 2016-02-16
  • 打赏
  • 举报
回复
刚刚试了指定分区查询,貌似也不行。前表正常,PARTITION RANGE SINGLE,但后表的执行计划还是跟以前一样。SQL语句: select ObjectNumber,ObjectName,StartTime from T_M_SectorDOHour partition(P20160215) where (ObjectNumber in (select oid from mod_negroup_info where group_id=186544)) and (CityID=12101) 头大...

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧