每天生成一张表,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是这种类型可以吗?如果我不每天生成一张表,而是每个终端生成一个表。那样插入又好慢。性能优化
主要字段有终端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是这种类型可以吗?如果我不每天生成一张表,而是每个终端生成一个表。那样插入又好慢。性能优化
别人都是查一天的,建个DATETIME 索引有啥用。
sql是很简单的查询:select id,time,allcolum... from data20130630 where id='' and datatime<='' and datatime>='';
如果有效果的话最好在数据库压力小的时候执行,因为并行会影响数据库的性能