達夢資料庫執行慢的原因及解決方法

2021-10-25 20:59:01 字數 3588 閱讀 9579

使用某些連線語句時,在oracle、maraidb等資料庫中都可以三四秒的速度執行出來,但在達夢中,居然要執行整整四十分鐘。經調整,在子查詢中多加了幾個字段,反而速度很快。

慢語句及執行計畫:

sql:

select

distinct nd**.fs,nd**.rs,nd**.ms,nd**.nd yqnd,a.bookcode,a.nd,

b.bookname booknameb,b.bookcode bookcodeb,b.nd ndb,b.fzlxbh,b.fzlxmc,b.fznrbh, b.fznrmc,

left

(b.fzlxmc,

2) kslx

from

(select

distinct a.bookcode,a.nd,a.fznrbh,a.fznrmc,a.fzlxbh,a.fzlxmc,

jjsj rs,

count

(a.je)

over

(partition

by a.fznrbh,a.fzlxbh,a.fznrmc,bookcode,nd) fs,

sum(a.je)

over

(partition

by a.fznrbh,a.fzlxbh,a.fznrmc,bookcode,nd) ms

from

(select a.nd,a.bookcode,b.fzlxbh,b.fzlxmc,fznrbh,fznrmc,pzrq,c.zjjysj,c.jjsj,

case

when jfje=

0then dfje else jfje end je

from audit_voucher a,audit_voucher_item b ,analy_kswlfx c

where a.bookcode=b.bookcode and a.fzbh=b.fzbh

and(b.fzlxmc like

'客戶%'

or b.fzlxmc like

'**商%'

or b.fzlxmc like

'客商%'

)and c.fzlxbh=b.fzlxbh

and c.ksbh=b.fznrbh

and c.ksmc=b.fznrmc

and c.bookcode=b.bookcode ) a) nd**,audit_voucher a,audit_voucher_item b

where a.bookcode=b.bookcode and a.fzbh=b.fzbh

and a.bookcode=nd**.bookcode and a.nd>=nd**.nd

and b.fzlxbh=nd**.fzlxbh and b.fznrbh=nd**.fznrbh

and(b.fzlxmc like

'客戶%'

or b.fzlxmc like

'**商%'

or b.fzlxmc like

'客商%'

);

執行計畫:

快語句及執行計畫:

sql:

select

distinct nd**.fs,nd**.rs,nd**.ms,nd**.nd yqnd,a.bookcode,a.nd,

b.bookname booknameb,b.bookcode bookcodeb,b.nd ndb,b.fzlxbh,b.fzlxmc,b.fznrbh,b.ysfznrbh,b.fznrmc,

left

(b.fzlxmc,

2) kslx

from

(select

distinct a.bookcode,a.nd,a.fznrbh,a.fznrmc,a.fzlxbh,a.fzlxmc,

jjsj rs,

count

(a.je)

over

(partition

by a.fznrbh,a.fzlxbh,a.fznrmc,bookcode,nd) fs,

sum(a.je)

over

(partition

by a.fznrbh,a.fzlxbh,a.fznrmc,bookcode,nd) ms

from

(select a.nd,a.bookcode,b.fzlxbh,b.fzlxmc,fznrbh,fznrmc,pzrq,c.zjjysj,c.jjsj,

case

when jfje=

0then dfje else jfje end je

from audit_voucher a,audit_voucher_item b ,analy_kswlfx c

where a.bookcode=b.bookcode and a.fzbh=b.fzbh

and(b.fzlxmc like

'客戶%'

or b.fzlxmc like

'**商%'

or b.fzlxmc like

'客商%'

)and c.fzlxbh=b.fzlxbh

and c.ksbh=b.fznrbh

and c.ksmc=b.fznrmc

and c.bookcode=b.bookcode ) a) nd**,audit_voucher a,audit_voucher_item b

where a.bookcode=b.bookcode and a.fzbh=b.fzbh

and a.bookcode=nd**.bookcode and a.nd>=nd**.nd

and b.fzlxbh=nd**.fzlxbh and b.fznrbh=nd**.fznrbh

and(b.fzlxmc like

'客戶%'

or b.fzlxmc like

'**商%'

or b.fzlxmc like

'客商%'

);

執行計畫:

可以看出,快的sql只是比慢的sql多查詢了b.bookname booknameb,b.bookcode bookcodeb,b.nd ndb,b.ysfznrbh這幾個字段。經試驗,這幾個字段並非特定,只要比慢語句多查詢b表的乙個字段(包括但不僅限於上面舉例的字段),查詢速度就會很快。

可能是因為資料量佔比問題,在字段少時返回資料佔比太大(?)所以達夢認為全表掃瞄會比走索引快;

統計資訊沒有收集,資料庫錯誤制定了執行計畫。

執行收集統計資訊的語句:

dbms_stats.gather_schema_stats(『ncw』,100,true,『for all indexed columns size auto』);

或者強制走索引:select /+index( 表名 索引名)/ 欄位a,欄位b from …

達夢資料庫DMHS載入中文資料亂碼解決方法

環境oracle同步到dm 解決辦法 oracle端檢查環境變數nls lang,設定為與資料庫一致,dm端要配export lang zh cn.gbk 環境dm同步到oracle 解決辦法 只配oracle端的nls lang,設定為與資料庫一致,dm端不需要配 配置字符集環境變數命令 最合適的...

達夢資料庫日期格式化 達夢資料庫時間型別的使用介紹

在資料庫的日常使用過程中,無論是記錄服務啟動時間,還是儲存前端應用中的訂單時間,都離不開使用各類日期型別,本文就將給大家介紹dm7中各種時間型別的區別和使用注意事項。一 dm7中時間日期型別簡介 dm7中常用的時間日期型別有這三種date,time,timestamp。date 型別包括年 月 日資...

達夢資料庫通過抓取堆疊資訊分析慢SQL

在資料庫安裝bin下面執行 gdbdmserver core.1270 set logging file opt dmdbms test.txt set logging on沒有生成core檔案,但資料庫很慢。在bin下執行 ps ef grep dmserver dmdba 4064 4009 1...