【应用场景】:参与分区的字段是时间day_id,类型是VARCHAR2(10),精确到小时,如:2010110923【方案一】:用listcreate table test ( 
day_id varchar2(10), 
name varchar2(20)
) partition  by list(day_id)
(
  partition p2010010101 values ('2010010101')  tablespace tbs
)
【方案二】:用rangecreate table test ( 
day_id varchar2(10), 
name varchar2(20)
) partition  by range(day_id)
(
  partition p2010010101 values less than ('2010010102')  tablespace tbs
)
【本人的想法】:我偏向于list,因为简单,就是“等于”不喜欢range,是因为less than()里的那个时间需要通过day_id转换为时间获取,并且再转回为varchar,繁琐但是我想听听更多大虾的意见

解决方案 »

  1.   

    时间一般用range,除非你的时间是一个固定的列表。
    列表分区存在以下一些限制:
    ● 只可以在列的列表中指定一个分区键,但它不能是 LOB 列。如果分区键是一个对
    象类型列,还可以按照列类型的某个特性进行分区。
    ● VALUES 子句中的每个分区值必须在表的所有分区中是唯一的。
    ● 不能在索引编排表中使用列表分区。
    ● 组成每个分区的值列表的字符串最长可以到 4KB。
    ● 所有分区的分区值累计最大数目不能超过 64KB-1。
      

  2.   

    沒有說那個更好,只有哪個跟適合。我覺得你的情況更適合用range,要不然1年365天,你的分區要365個嗎?
      

  3.   

    时间的话,用range好,因为想要用到分区查询,肯定需要用到分区条件
      

  4.   

    固定几个取值时可以使用list,不确定或者值较多时使用range