有一张表A,6亿条数据量,有6个字段id(唯一键varchar2(22)),sj(date),name(varchar2(7)),t1(varchar2(255)),t2(varchar2(255)),t3(varchar2(255)); 
请问应该如何设计这张表? 
怎样才能提高这张表的查询速度? 如果采用分区,怎样分区?分区字段为? 
如果建立索引?怎样建?建什么类型的?(表索引、Global Index、Local Index有什么区别?) 查询时sql应该如何编写? 
假如对name字段需要进行like查询,需要对表如何处理? 另注:这张表每天有300万的数据插入。采用oracle数据库。 
id为序列值 
name无规律 
sj为该条记录插入数据库的数据库系统时间 
t1,t2,t3均为无规律的值 对该表有insert和select操作,都是全字段操作;查询的条件主要有sj>'时间1' and sj <'时间2' and name like '我的名字'

解决方案 »

  1.   

    对主要查询字段建索引
    用like时注意,避免用like '%条件%',这样会使索引失效分区的话,可以考虑按时间,主要考虑用户经常查询的范围,比较经常按月的,就按月分区BTW,这里的版主经常不出现,所以你向他提问基本上没戏
      

  2.   

    这么大的数据量已经不能用普通sql的解决方案来考虑了,关键是你要清楚你自己怎么用这些数据,单纯的分区表或者索引是没有太大作用的.比如like '%条件%'这样的查询是无法正常工作了,google怎么做的,你看看bigtable的介绍。如果是一般应用,尽量细化功能。比如10亿人口的信息,你要按照身份证号码的前几位分服务器、分库、分表、分日期,数据都放到一起肯定会死的很难看了。如果是关于数据统计功能的,需要使用olap之类的,大量预处理和冗余数据才能解决问题。
      

  3.   

    如果可以考虑其它数据库产品的话,建议你去了解一下Sybase IQ .
      

  4.   

    这个版人气貌似不高啊还有哪里是学ORACLE的好地?:)
      

  5.   

    可以考虑range  partition,比如按每周一分区.这样至少有利于减少段的竞争.另外,你的表update操作多吗?或者只有insert?
      

  6.   

    对该表只有select 和 insert操作