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建分区索引。