数据库正经操作——两表关联join条件切勿使用or
项目中,需要找到36业务单据(100w条记录)对应的流程实例(全部流程实例数据量2000w)数据,执行了8个小时,未能结束执行,后面放弃了
简化的脚本(只包含一个单据)如下:
select a.frouteid,a.finstanceid
from T_BF_INSTANCEENTRY a join T_AP_PAYABLEENTRY_pkid_delete b
on (a.fttablename='T_AP_PAYABLEENTRY' and a.ftid=b.FENTRYID)
or (a.FSTABLENAME='T_AP_PAYABLEENTRY' and a.FSID=b.FENTRYID)
执行简化的脚本,3min中未能出结果,取消查询
修改为下面的脚本:
select a.frouteid,a.finstanceid
from T_BF_INSTANCEENTRY a join T_AP_PAYABLEENTRY_pkid_delete b
on (a.fttablename='T_AP_PAYABLEENTRY' and a.ftid=b.FENTRYID)
union
select a.frouteid,a.finstanceid
from T_BF_INSTANCEENTRY a join T_AP_PAYABLEENTRY_pkid_delete b
on (a.FSTABLENAME='T_AP_PAYABLEENTRY' and a.FSID=b.FENTRYID)
执行新脚本20s结束,返回结果11w行
查看执行计划,修改前的脚本使用嵌套循环连接(Nested Loop Join)而修改后则使用哈希匹配(Hash Join),对大量数据不需要排序的场景,哈希匹配有明显的性能优势。
下次写join条件可就要注意咯
强大的总结能力与实践能力!!!!!
学习
数据库正经操作——两表关联join条件切勿使用or
本文2024-09-16 18:42:01发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-23836.html
- 鼎捷EAI整合規範文件V3.1.07 (集團).pdf
- 鼎捷OpenAPI應用場景說明_基礎資料.pdf
- 鼎捷OpenAPI應用場景說明_財務管理.pdf
- 鼎捷T100 API設計器使用手冊T100 APIDesigner(V1.0).docx
- 鼎新e-GoB2雲端ERP B2 線上課程E6-2應付票據整批郵寄 領取.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程A4使用者建立權限設定.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程C3會計開帳與會計傳票.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程E6-1應付票據.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程A5-1進銷存參數設定(初階篇).pdf
- 鼎新e-GoB2雲端ERP B2 線上課程D2帳款開帳與票據開帳.pdf