有这么一张表,有以下几个数据项:
1,车辆信息编号 (自动编号)
1,路口编号  (统一编号)
3,经过路口的时间
4,车牌号
5,行驶速度这是一个监测经过某些路口的车辆信息的表。
难题是数据量很大,10亿左右,但要求查询时间不能高于2S。那我应该怎么样设计数据库,怎么样分区,
或者用其它方法查询效率才会高呢?

解决方案 »

  1.   

    要求查询,那么平时业务上,是怎么样的查询?
    如果查一个月的数据,也要求2S,不可能完成的任务嘛,呵呵。10亿,是一个月? 一年? 这张表的增量情况如何?简单的来看,分区是要的,按月分区
    按业务分析来看(自己推测一下),一般是 查路口 -> 查时间 -> 查车牌 ,至于公安嘛,就是  查车牌 -> 查路口 + 查时间 。 情况比较复杂啊,建个复合索引?
      

  2.   

    这个是公安了。刚开始是按时间分区。range-list。一年一导出,把一年分成了54周,然后一周里面再按天分成七天。这样倒是可以。为了支持这样分区,就多加了两个字段:第几周,星期几。后来发现人家原表里面没有这两字段,不兼容。
      

  3.   

    其实看你时间分区怎么做了 ,如果是按几号分区时不会增长的,否则如8楼所说 ,你的物理存储时会不断的增加 ,你还得设置你的自增策略 。其实你可以采用11楼建议,但是加上日期 ,这样的查询效率可以轻松达到 2s 。不知道你知道子分区的概念,分区里面建分区 ,34个省你就可以理解成 34个字表 。另外你可以注意一下数据库设计 ,一个是常用查询条件建索引。如果该表经常被insert或者update ,你的索引需要经常的删除重建(建议用函数实现)。另外注意迁移数据,迁移数据过程注意关闭 备份表的约束 ,迁移完毕打开约束,这样迁移速度更快!另外在oracle9i后可以支持多进程执行。但是不宜起的很多 ,否则反而会降低速度,如果是多进程交叉处理数据时,造成数据库锁竞争和死锁现象。查询没有哈 。。
    2秒没啥问题 ,加油 ,写累了,睡觉去了 
      

  4.   

    按照你提供的表列的信息,即使10亿条数据,I/O也不算大。 每年的数据历史有做结转吗?
    如果有,每年的数据不会增加太多。先考虑建立索引是否能解决你的问题。索引列就是你程序界面
    的查询条件。 在优化下sql