賽迪網 > IT技術 數據庫 > Oracle
  IT資訊搜索
 
IT產品搜索
[程式開發][網管世界][網路安全][數據庫技術]
[作業系統][嘉賓聊天·線上訪談][活動集錦]
[精彩專題][Symantec專區][訂閱IT技術週刊]
[開發論壇][網管論壇][安全論壇][數據庫論壇]
[作業系統論壇][Sybase專區][IBM dW技術專區]
[病毒求助][病毒與漏洞播報][文檔·源碼下載]

當數據積累到一定時間後執行會越來越慢

發佈時間:2008.07.25 04:34     來源:賽迪網    作者:Edward

【賽迪網-IT技術報道】最近很長一段時間都在優化一個項目,這個項目存在許多問題,從數據架構到工作流

程,我一直在思考一些有關oracle性能優化的問題,我跟開發實施人員進行過多次交流,

發現存在許多交流障礙,許多問題實施人員覺得sql語句執行很快,並不存在性能問題,

我花了大量時間要他看執行計劃,說明當數據積累到一定時間後,會執行越來越慢。

我舉一個例子來說明問題:

SELECT v2.*

FROM consultationrecorddoctor t1

RIGHT OUTER JOIN

(SELECT cr.*, crc.modifydate, crc.modifyuserid, crc.consultationtime,

crc.applyconsultationdeptid, crc.askconsultationdeptid,

crc.consultationdeptid, crc.casehistory_right,

crc.consultationorder_right, crc.consultationidea_right,

crc.otherhospital_right, crc.consultationdate,

crc.maindoctorid, c1.deptname_vchr AS applydeptname,

c2.deptname_vchr AS askdeptname,

c3.deptname_vchr AS deptname,

f_getempnamebyno (crc.maindoctorid) AS maindocname

FROM consultationrecord cr,

consultationrecordcontent crc,

t_bse_deptdesc c1,

t_bse_deptdesc c2,

t_bse_deptdesc c3,

(SELECT cr.inpatientid, cr.inpatientdate, cr.opendate,

cr.createdate,

MAX (crc.modifydate) AS maxmodifydate

FROM consultationrecord cr,

consultationrecordcontent crc

WHERE (crc.applyconsultationdeptid = '0000208')

AND cr.inpatientid = crc.inpatientid

AND cr.inpatientdate = crc.inpatientdate

AND cr.opendate = crc.opendate

AND cr.status = 0

GROUP BY cr.inpatientid,

cr.inpatientdate,

cr.opendate,

cr.createdate) v1

WHERE (crc.applyconsultationdeptid = '0000208')

AND cr.inpatientid = crc.inpatientid

AND cr.inpatientdate = crc.inpatientdate

AND cr.opendate = crc.opendate

AND cr.status = 0

AND crc.applyconsultationdeptid = c1.deptid_chr

AND crc.askconsultationdeptid = c2.deptid_chr

AND crc.consultationdeptid = c3.deptid_chr

AND cr.inpatientid = v1.inpatientid

AND cr.inpatientdate = v1.inpatientdate

AND cr.opendate = v1.opendate

AND v1.maxmodifydate = crc.modifydate

AND crc.maindoctorid IS NOT NULL) v2

ON t1.inpatientid = v2.inpatientid

AND t1.inpatientdate = v2.inpatientdate

AND t1.opendate = v2.opendate

AND t1.modifydate = v2.modifydate

AND t1.employeeflag = 1

WHERE t1.employeeid IS NULL

ORDER BY t1.employeeid DESC, v2.askdeptname, v2.consultationdate;

查詢使用了一個右連接,查詢的表並沒有包含t1表的字段,而且在實際的t1.employeeid中

根本不存在NULL的值,實際上是從一個大的結果集剔除一個大結果集的而獲得一個小的結

果集,隨著crc表數據量加大,會越來越慢!(責任編輯:盧兆林)


[ 發表評論 ] 字體[  ] [ 列印 ] [ 進入博客 ] [ 進入論壇 ]  [ 推薦給朋友 ]
  相關文章
· 講解Oracle數據庫冷備份恢復的具體步驟 (07-18) · 講解Oracle數據庫冷備份恢復的具體步驟 (07-18)
· 講解Oracle數據庫LogMiner工具的使用方法 (07-15) · 講解Oracle數據庫LogMiner工具的使用方法 (07-15)
· Oracle新手經常碰到的六個錯誤及解決方案 (07-15) · 講解Oracle數據庫ORA-00257故障的解決過程 (07-14)
· 講解Oracle數據庫ORA-00257故障的解決過程 (07-14) · 詳細講解Oracle數據庫運行錯誤的解決方法 (07-10)
· 廣東電信業1至5月完成業務總量1425億元 (07-08) · Oracle數據庫高性能秘密之數據高速緩存 (07-08)
  客戶需求反饋表
* 姓  名:
更多資料  了解方案  認識廠商
* 單位名稱:
* 聯繫電話:
* 電子郵件:
  賽迪推薦  
  手機·資費 ·新品·導購·評測·手機資費·寬帶
手機搜索  諾基亞 N73 MOTO Z6
  IT產品 ·筆記本·臺式機·伺服器·列印·投影
IT產品搜索 
  IT技術 ·開發·網管·安全·數據庫·作業系統
  資訊化 ·熱點·專題·訪談·週刊·方案案例
· 駭客病毒現身互聯網 個人數據資訊受威脅
· ERP實施過程中項目管理失控的幾種表現
· 首屆贏在軟體創富大賽 SOA技術+應用
· 個人理財合規系統方案 方正電子公文系統
  IT博客 ·曾劍秋·項立剛·Java學習·網管
  IT技術論壇 ·開發·網管·安全·數據庫·系統