|
|
最初由 husthxd 发布
[B]CPU Elapsd
Buffer Gets Executions Gets per Exec %Total Time (s) Time (s) Hash Value
--------------- ------------ -------------- ------ -------- --------- ----------
30,974,145 438 70,717.2 28.2 316.44 680.44 132190350
Module: JDBC Thin Client
select /*+rule*/ c.id, c.EDISPLAYNAME, c.CDISPLAYNAME, c.WEBURL,
c.LASTUPDATE, c.PROVINCE FROM COMPANY c where c.id in ( select
v.companyid from vacancy v,vaccity vcity where v.id=vcity.vac
ancyid and v.issuestatus=3 and SUBSTR(vcity.citycode,1,2)=SUBS
TR(:1,1,2)) order by c.lastupdate desc
使用了rule模式?
v.issuestatus上是否有索引,索引的选择性高不高?
能否把select /*+rule*/ c.id, c.EDISPLAYNAME, c.CDISPLAYNAME, c.WEBURL,
c.LASTUPDATE, c.PROVINCE FROM COMPANY c where c.id in ( select
v.companyid from vacancy v,vaccity vcity where v.id=vcity.vac
ancyid and v.issuestatus=3 and SUBSTR(vcity.citycode,1,2)=SUBS
TR(:1,1,2)) order by c.lastupdate desc
的执行计划贴出来看看?
如biti所说的:
关键在于找出热点的块到底是什么
才能针对性的解决问题
联合 v$latch / v$latch_children /x$bh / dba_objects 找出是哪些对象的热点块
再看是索引还是表
针对性的解决问题 [/B]
这就是表结构的问题,其实只要在vaccity增加一个冗余字段issuestatus就完全解决了,但现在动不了结构。现在我打算整合一个中间表,将检索用的字段整合到这张表中,所有记录一共就几百万条,有效的其实就几万条,将这部分单摘出来就算全表查询放到keep buffer cache中性能也会比现在好太多了。但有时会一次读出几千条数据,这个是不可避免的,这个问题怎么,有点类似BBS分页的情况。 |
|