大神们,请教个问题啊,虚拟列分区,这样表按trade_id去查询的时候,是全区扫描,必须在where条件里加上accept_month才能分区裁剪。什么方法能用trade_id查时,就分区裁剪

0
大神们,请教个问题啊,虚拟列分区,这样表按trade_id去查询的时候,是全区扫描,必须在where条件里加上accept_month才能分区裁剪。什么方法能用trade_id查时,就分区裁剪
create table so_trade_liu_range12
( TRADE_ID  NUMBER(16) not null,
   NAME    VARCHAR2(12),
   accept_month as (TO_NUMBER(SUBSTR(trade_id,5,2)))
   )
partition by range (accept_month)
(
   partition p1 values less than (2),
   partition p2 values less than (3),
   partition p3 values less than (4),
   partition p4 values less than (5),
   partition p5 values less than (6),
   partition p6 values less than (7),
   partition p7 values less than (8),
   partition p8 values less than (9),
   partition p9 values less than (10),
   partition p10 values less than (11),
   partition p11 values less than (12),
   partition p12 values less than (maxvalue)
);
已邀请:
0

老头子 - 专注是唯一的捷径 2015-10-20 回答

http://www.flybi.net/blog/azzo/2172
这里有分区的介绍
你要搞明白分区剪裁是什么意思,才能合理使用
你是按照TO_NUMBER(SUBSTR(trade_id,5,2))进行分区的,不是trade_id分区的,怎么可能对trade_id进行分区剪裁呢?
就跟你建了个索引在trade_id上,你对trade_id做计算,怎么可能会走索引呢?

要回复问题请先登录注册