使用某些連線語句時,在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...