各位大侠,小弟在写DB2的查询语句中,存在性能问题,劳烦大家帮忙看看,有什么好方法可以优化一下,在线等,急啊。
先谢谢大家了
---------查询1
SELECT DISTINCT(a.C_COMPONENTID) AS id, a.C_COMPONENTNAME AS NAME, min(g.C_ORDER)
FROM TB_ORG_ORGUNIT b, TB_ORG_UNITRELATION e, TB_INF_EMPLOYEE f,TB_CNB_PAYRECORDINFO a
LEFT JOIN TB_CNB_GROUPCOMPONENT g ON a.C_GROUPID = g.C_GROUPID AND a.C_COMPONENTID = g.C_COMPONENTID
WHERE b.C_OID_ORGUNIT = e.C_ORGUNITID
AND b.C_OID_ORGUNIT = f.C_UNITID
AND f.C_EMPLOYEEID = a.C_EMPOID
AND a.C_YEAR = [year]
AND a.C_MONTH >= [beginmonth]
AND a.C_MONTH <= [endmonth]
AND b.C_STATUS = '1'
AND locate((SELECT d.C_REPORTCODE FROM TB_ORG_UNITRELATION d
WHERE d.C_STATUS = '1' AND d.C_ORGUNITID = [orgunitid] AND d.C_HIBERARCHYID = 1 AND d.C_STATUS = '1'), e.C_REPORTCODE) = 1
GROUP BY (a.C_COMPONENTID, a.C_COMPONENTNAME)
ORDER BY min(g.C_ORDER)
------- 查询2
select a.C_UNITID,
a.C_UNITCODE,
a.C_UNITNAME,
a.C_COMPONENTID,
a.C_COMPONENTNAME,
a.C_EMPOID,
a.C_EMPLOYEECODE,
a.C_EMPLOYEENAME,
sum(a.C_VALUE) sum_value,
b.C_ALLORDER,
tcc.c_order
FROM TB_INF_EMPLOYEE b, TB_ORG_UNITRELATION e, TB_CNB_PAYRECORDINFO a
left join tb_cnb_groupcomponent tcc on a.c_groupid = tcc.c_groupid and a.c_componentid = tcc.c_componentid
WHERE a.C_EMPOID = b.C_EMPLOYEEID
AND a.C_UNITID = e.C_ORGUNITID
AND a.C_YEAR = $year
AND a.C_MONTH >= $beginmonth
AND a.C_MONTH <= $endmonth
AND locate((SELECT d.C_REPORTCODE FROM TB_ORG_UNITRELATION d WHERE d.C_STATUS = '1' AND d.C_ORGUNITID = $orgunitid AND d.C_HIBERARCHYID = 1 AND d.C_STATUS = '1'), e.C_REPORTCODE) = 1
AND substr(CHAR(a.C_COMPONENTID),12,8) IN ($componentid)
GROUP BY a.C_UNITID,
a.C_UNITCODE,
a.C_UNITNAME,
a.C_COMPONENTID,
a.C_COMPONENTNAME,
a.C_EMPOID,
a.C_EMPLOYEECODE,
a.C_EMPLOYEENAME,
b.C_ALLORDER,
tcc.c_order
------------------------------------------------------------------------------------------------------------
------解决方案--------------------------------------------------------
这么复杂,可以用工具db2advis看看他给出的建议吧
------解决方案--------------------------------------------------------
http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/core/r0002452.htm
------解决方案--------------------------------------------------------
http://publib.boulder.ibm.com/infocenter/db2luw/v9/index.jsp?topic=/com.ibm.db2.udb.admin.doc/doc/r0002452.htm
------解决方案--------------------------------------------------------
db2 v9的话,用db2advis,否则的话,还是看access path吧。