1、问题
sql语句oracle执行0.4s,达梦数据库执行3s以上;
Sql语句如下:
SELECT *
FROM (
SELECT C_CREATETIME, C_CREATOR, C_CURRENT, C_OID, C_ORDER, C_PARENT, C_REMARK, C_STATUS,
C_VERSION, C_RELATIONID, C_ICON, C_OPENICON, C_LIB, C_SCORE, C_VIEWTIMES, TRANSFERPERSON,
C_HISTORY, C_HANDLE, C_DELETETIME, C_DELETEUSER, JHCC, TM, DAGMC, DAGDM, LDDW, DH, JGDM,
QZMC, QZH, MLH, AJH, ND, BGQX, FLH, WJBH, JGWT, ML, ZRZ, HH, YS, CWSJ, GDRQ, MJ, BMQX, QWLX,
KFZT, TY, QSRQ, ZZRQ, ZYH, ZTLX, BQ, ZTGG, CFWZ, KZBS, JMBS, FZ, YJPC, YJFS, DALX, YWBS,
BMRWMC, HDRWMC, JDRWMC, RWH, ZT, DQR, YID, DZDA, JDZT, JDPCH, JDJD, FBZT, FBPCH, FBJD,
TRANSFERDEPARTMENT, RWMC, FBWD, TRANSFERPERSTATUS, TRANSFERDATE, RETURNVIEWS, TRANSFEROUTSTATUS,
ARRANGE, CALLBACKREASION, TRANSFERRECEIVEPERSON, TRANSFERPERSONNAME, CKZT, TRANSFERINSTATUS,
QXZT, C_MONITOR_STATE, C_MONITOR_ITEMNAME, ZGQKSM, ZGJZSJ, UPLOAD_STATUS, GYJBS, NDHBGQX,
JDYJ1, JDLY1, JDBS, JDRQ, C_CONVETSTATUS, KZLY, JDR, BMZT, ZCQZT, WJZHLX, SMFBL, SMSCMS,
TJZTBH, ZLZ, BZ, C_ISARCHIVING, GDFWJDZT, SJLY, CHECKRESULT, SFYS, GDND, WJXCSJ, DAMLDM,
ZJBS, LSH, ZTC, recid, DMM, SRR, SRSJ, DHMM, CZ, XZ, Q, C, Z, ZJDM, NFSFZ, NVSFZ, STFLH,
LMMC, AJHM, YH, TDSYZ, ZDBH, RQ, TDZL, QSXZ, ZDBHM
FROM DA_MD_358593
WHERE (
(C_STATUS = 0)
AND (C_CURRENT = 1)
AND (((C_PARENT IS NULL OR C_PARENT = '') ))
AND ((((((ARRANGE = '03' ))))))
)
AND (C_LIB = '40a531b7fb7b49b49970b60ec7086983')
ORDER BY C_ORDER ASC
)
WHERE rownum <= 10
2、解决过程
2.1、添加了索引,更新了统计信息后,执行sql还是3s以上
2.2、使用hint,添加强制索引,执行时间0.02s到0.04s之间,添加hint后sql语句如下:
SELECT *
FROM (
SELECT /+index(DA_MD_358593,DA_MD_358593_C_ORDER)/ C_CREATETIME, C_CREATOR, C_CURRENT, C_OID, C_ORDER, C_PARENT, C_REMARK, C_STATUS,
C_VERSION, C_RELATIONID, C_ICON, C_OPENICON, C_LIB, C_SCORE, C_VIEWTIMES, TRANSFERPERSON,
C_HISTORY, C_HANDLE, C_DELETETIME, C_DELETEUSER, JHCC, TM, DAGMC, DAGDM, LDDW, DH, JGDM,
QZMC, QZH, MLH, AJH, ND, BGQX, FLH, WJBH, JGWT, ML, ZRZ, HH, YS, CWSJ, GDRQ, MJ, BMQX, QWLX,
KFZT, TY, QSRQ, ZZRQ, ZYH, ZTLX, BQ, ZTGG, CFWZ, KZBS, JMBS, FZ, YJPC, YJFS, DALX, YWBS,
BMRWMC, HDRWMC, JDRWMC, RWH, ZT, DQR, YID, DZDA, JDZT, JDPCH, JDJD, FBZT, FBPCH, FBJD,
TRANSFERDEPARTMENT, RWMC, FBWD, TRANSFERPERSTATUS, TRANSFERDATE, RETURNVIEWS, TRANSFEROUTSTATUS,
ARRANGE, CALLBACKREASION, TRANSFERRECEIVEPERSON, TRANSFERPERSONNAME, CKZT, TRANSFERINSTATUS,
QXZT, C_MONITOR_STATE, C_MONITOR_ITEMNAME, ZGQKSM, ZGJZSJ, UPLOAD_STATUS, GYJBS, NDHBGQX,
JDYJ1, JDLY1, JDBS, JDRQ, C_CONVETSTATUS, KZLY, JDR, BMZT, ZCQZT, WJZHLX, SMFBL, SMSCMS,
TJZTBH, ZLZ, BZ, C_ISARCHIVING, GDFWJDZT, SJLY, CHECKRESULT, SFYS, GDND, WJXCSJ, DAMLDM,
ZJBS, LSH, ZTC, recid, DMM, SRR, SRSJ, DHMM, CZ, XZ, Q, C, Z, ZJDM, NFSFZ, NVSFZ, STFLH,
LMMC, AJHM, YH, TDSYZ, ZDBH, RQ, TDZL, QSXZ, ZDBHM
FROM DA_MD_358593
WHERE (
(C_STATUS = 0)
AND (C_CURRENT = 1)
AND (((C_PARENT IS NULL OR C_PARENT = '') ))
AND ((((((ARRANGE = '03' ))))))
)
AND (C_LIB = '40a531b7fb7b49b49970b60ec7086983')
ORDER BY C_ORDER ASC
)
WHERE rownum <= 10
3、使用SF_INJECT_HINT函数将sql语句加入到系统表SYSINJECTHINT
SF_INJECT_HINT('SELECT *
FROM (
SELECT C_CREATETIME, C_CREATOR, C_CURRENT, C_OID, C_ORDER, C_PARENT, C_REMARK, C_STATUS,
C_VERSION, C_RELATIONID, C_ICON, C_OPENICON, C_LIB, C_SCORE, C_VIEWTIMES, TRANSFERPERSON,
C_HISTORY, C_HANDLE, C_DELETETIME, C_DELETEUSER, JHCC, TM, DAGMC, DAGDM, LDDW, DH, JGDM,
QZMC, QZH, MLH, AJH, ND, BGQX, FLH, WJBH, JGWT, ML, ZRZ, HH, YS, CWSJ, GDRQ, MJ, BMQX, QWLX,
KFZT, TY, QSRQ, ZZRQ, ZYH, ZTLX, BQ, ZTGG, CFWZ, KZBS, JMBS, FZ, YJPC, YJFS, DALX, YWBS,
BMRWMC, HDRWMC, JDRWMC, RWH, ZT, DQR, YID, DZDA, JDZT, JDPCH, JDJD, FBZT, FBPCH, FBJD,
TRANSFERDEPARTMENT, RWMC, FBWD, TRANSFERPERSTATUS, TRANSFERDATE, RETURNVIEWS, TRANSFEROUTSTATUS,
ARRANGE, CALLBACKREASION, TRANSFERRECEIVEPERSON, TRANSFERPERSONNAME, CKZT, TRANSFERINSTATUS,
QXZT, C_MONITOR_STATE, C_MONITOR_ITEMNAME, ZGQKSM, ZGJZSJ, UPLOAD_STATUS, GYJBS, NDHBGQX,
JDYJ1, JDLY1, JDBS, JDRQ, C_CONVETSTATUS, KZLY, JDR, BMZT, ZCQZT, WJZHLX, SMFBL, SMSCMS,
TJZTBH, ZLZ, BZ, C_ISARCHIVING, GDFWJDZT, SJLY, CHECKRESULT, SFYS, GDND, WJXCSJ, DAMLDM,
ZJBS, LSH, ZTC, recid, DMM, SRR, SRSJ, DHMM, CZ, XZ, Q, C, Z, ZJDM, NFSFZ, NVSFZ, STFLH,
LMMC, AJHM, YH, TDSYZ, ZDBH, RQ, TDZL, QSXZ, ZDBHM
FROM DA_MD_358593
WHERE (
(C_STATUS = 0)
AND (C_CURRENT = 1)
AND (((C_PARENT IS NULL OR C_PARENT = '') ))
AND ((((((ARRANGE =03 ))))))
)
AND (C_LIB = 40a531b7fb7b49b49970b60ec7086983)
ORDER BY C_ORDER ASC
)
WHERE rownum <= 10','index(DA_MD_358593),index(DA_MD_358593_C_ORDER)','INJECT3','test injecting hint', TRUE,TRUE)
执行完成后,执行SELECT * from SYSINJECTHINT;查询结果如下
4、添加完成后,重新执行sql语句,执行时间0.017s
5、查看执行计划,sql优化完成
文章
阅读量
获赞