【环境】
SequoiaDB版本:2.1
SequoiaSQL版本:与DB对应版本
操作系统版本:Suse Linux 12 SP1
【问题描述】
oaflowinstance记录数170万 oaflowwkiinstance记录数1.2亿 oaflowfield记录数1.2亿 userid有8个不同的值,其中5个值记录数比较多,wki_state有6个不同的值,userid与其他表关联值比较少时耗时在5s,百万级别是耗时在2-3分钟。
具体sql如下:
select a.pri_id,c.fieldvalue,a.urgency,b.wki_checkouttime from oaflowinstance a inner join oaflowwkiinstance b on a.pri_id = b.pri_id
inner join oaflowfield c on a.pri_id = c.pri_id
where b.userid=40554 and b.wki_state=6 limit 5;
执行计划请查看附件。
【解决方法】
单独对a表和b表进行关联,pri_id条件可以正确下压。采用cte方式将a、b两表先关联后,再跟c表关联。
explain with temp as ( select a.pri_id as pri_id, a.urgency as urgency, b.wki_checkcuttime as wki_checkcuttime from oaflowinstance a inner join oaflowwkiinstance b on b.pri_id=a.pri_id where b.userid=40554 and b.wki_state=6 ) select d.pri_id, c.feildvalue, d.urgency , d.wki_checkcuttime from temp d, oaflowfield c where d.pri_id = c.pri_id
从cte.jpg中可见,pri_id可以正常下压。
但是由于fdw在对cte的表字段获取时有bug, 报column
is not reconigzed错误, 实际运行时会很慢。 将改bug修复后即可。
【参考链接】
错误码
常见错误处理指南