日期:2014-05-17  浏览次数:21023 次

oracle大表查询效率
每天生成一张表,5000个终端每10s左右发来一条数据,发来的信息都存在这个表里,大概有几千万条记录。
主要字段有终端ID(VARCHAR2 15). DATATIME(VARCHAR2 20)...其他的不重要 其中终端ID不唯一
查询时候一般是按终端ID和时间条件查询
不建索引,查询一个终端的一天数据,大概要13s左右
建了终端ID字段的索引,查询一个终端的一天数据,大概要7s左右。还不满足要求。
这是执行计划
Execution Plan
----------------------
   0      SELECT STATEMENT Optimizer=CHOOSE
   1    0   TABLE ACCESS (BY INDEX ROWID) OF 'DATA20130630'
   2    1     INDEX (RANGE SCAN) OF '0630_PK' (NON-UNIQUE)
Statistics
----------------------
          0  recursive calls
          0  db block gets
       4639  consistent gets
       3198  physical reads
          0  redo size
     402252  bytes sent via SQL*Net to client
      38231  bytes received via SQL*Net from client
        290  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
       4324  rows processed

哪位能帮我分析一下怎么优化
如果建分区表,这个datattime是这种类型可以吗?

如果我不每天生成一张表,而是每个终端生成一个表。那样插入又好慢。
性能优化

------解决方案--------------------
客户一般都比较关注统计数据,不需要所有的记录吧。
每天记录完后,跑一个定时的统计程序,生成统计临时表,这类需求更普遍些。
------解决方案--------------------
按月建分区,然后datatime建分区索引。