为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】: DM8
【操作系统】:kylinV10
【CPU】: 16U,arm64
【问题描述】:连表查询性能
a表数据150万,b表数据90万,
sql如下
SELECT
/+ENABLE_INDEX_FILTER(1) /
count(b.rec_id)
FROM
mis_rec b /+ enable_hash_join(0)*/,
wf_act a
WHERE
b.rec_id = a.biz_entry_id
AND b.rec_type_id not in(1,4)
AND b.merge_flag <> 2
AND a.part_id in (59917)
AND a.act_property_id in(1,5)
AND a.ard_state_id <>1
a表条件命中
b表的条件确实命中很多
执行计划如下
ET如下
先在单独跑sql,执行很快
但是在压力测试时,使用jmeter单独压力sql,TPS只有200
可以试试调大FAST_POOL_PAGES,将表加入预加载
SP_SET_TAB_FAST_POOL_FLAG('用户名', 'MIS_REC', 1);
SP_SET_TAB_FAST_POOL_FLAG('用户名', 'WF_ACT', 1);
把b表的rec_id,rec_type_id,merge_flag建个复合索引,消除回表看下能否有提升
如果A表结果集合只有800多行的话,可以试试直接写成
select * from b where b.rec_id in (select a.biz_entry_id from a ) 子查询试试吧