近期一项目开发,需定义一表,存储外围系统同步来的数据,在此表中存在起号、止号两字段,现需要根据具体的号码定位此表中记录,因此表数据量为百万数量级,使用>= and <=可成功进行记录的定位,建立索引后,速度不慢,但在并发情况下CPU消耗过高,如发生高并发的情况,数据库CPU会出现耗尽情况,请问各位高手有好的解决办法吗?
谢谢jiaorg, 开发中用到的sql语句如下:select mc from tableName where dm=? and (号码>=qh and 号码<=zh);表内数据每天同步一次,主要为insert 操作,对qh和zh已经建立了联合索引,查询速度可以,但就是没次查询的时候,数据库服务器的CPU消耗过大。谢谢各位
1、初步考虑建立联合索引试验
2、使用bitmap index索引,如果insert、update、delete操作不多的话
开发中用到的sql语句如下:select mc from tableName where dm=? and (号码>=qh and 号码<=zh);表内数据每天同步一次,主要为insert 操作,对qh和zh已经建立了联合索引,查询速度可以,但就是没次查询的时候,数据库服务器的CPU消耗过大。谢谢各位
楼主可以在QH上建立分区索引,或者表也应该建立分区存储,然后DM也建立一个索引,这样子也许效率会更高点,但最好还是看一下执行计划。看消耗在什么地方。这个才是解决的根本
2 from fp_xs
3 where fp_dm = '' and ('' >= fpqh and '' <= fpzh)
4 order by lrrq desc;未选定行
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE
1 0 SORT (ORDER BY)
2 1 TABLE ACCESS (BY INDEX ROWID) OF 'FP_XS'
3 2 INDEX (RANGE SCAN) OF 'INDX_FPXS_FPDMFPQH' (NON-UNIQUE
)Statistics
----------------------------------------------------------
135 recursive calls
0 db block gets
68 consistent gets
0 physical reads
0 redo size
270 bytes sent via SQL*Net to client
373 bytes received via SQL*Net from client
1 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
0 rows processed