为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:
【操作系统】:
【CPU】:
【问题描述】*:dm7
select
a.id ,
a.LIST_ID as listId,
a.POWER,
a.FDDYNAME as dyName ,
a.FDDYID as dyId,
a.MARK ,
a.jypdate,
c.pdate,
a.CREATEDATE ,
b.SCREENNAME as username,
c.PERIOD_ID periodId
from
NMJY.T_JYGL_JYLC_MONTHLY_DELIST_PERSIST(160万行) a
left join NMJY.t_security_user(8千行) b on a.CREATOR = b.USERID
left join NMJY.T_JYGL_JYLC_MONTHLY_OBJECT_CURVE_PERSIST(3000万行) c on a.list_id = c.id
where
a.SEQID = ? and a.DELIST_TYPE = '1'
and a.JYPDATE = ? and a.FDDYID in (select DISTINCT t.FDDYID from
NMJY.t_bas_fddy t
where t.ISENABLE = '1' and t.PLANTID = ? ) order by a.CREATEDATE
T_JYGL_JYLC_MONTHLY_DELIST_PERSIST表建个组合索引,字段从CREATOR、list_id、SEQID、DELIST_TYPE、JYPDATE、FDDYID、CREATEDATE这几个里面选过滤性好的。
a.SEQID = ? and a.DELIST_TYPE = '1'
and a.JYPDATE = ?
这个几个条件, 可以考虑一下,提前处理, 即: from (select * from NMJY.T_JYGL_JYLC_MONTHLY_DELIST_PERSIS where
SEQID = ? and DELIST_TYPE = '1'
and JYPDATE = ?) a
这样可以减少 left join 时处理的行数.
T_JYGL_JYLC_MONTHLY_OBJECT_CURVE_PERSIST 表上的筛选列 c.id 和 c.pdate, c.PERIOD_ID 上 可以创建一个组合索引, 创建后, 需要收集索引的统计信息 .
试试 添加hint : /* + SUBQ_CVT_SPL_FLAG(12) */
是否有效.
建议和对应的达梦原厂服务人员联系下,可以提供原厂远程优化服务的