暂无图片
分享
Edward
2021-04-12
大表驱动小表如何优化

1、大表驱动小表导致数据库性能非常低,表如下
SELECT “T0”.“FID” “ID”, “T0”.“FSEQ” “SEQ”, “T0”.“FPARENTID” “T1.ID”, “T0”.“FPAYTYPEID” “T2.ID”, “T0”.“FREQPAYAMOUNT” “REQPAYAMOUNT”, “T0”.“FAUDITAMOUNT” “AUDITAMOUNT”, “T0”.“FAUDITAMOUNTLOC” “AUDITAMOUNTLOC”, “T0”.“FPAYDAY” “PAYDAY”, “T0”.“FACCOUNTBANKNAMEID” “T3.ID”, “T0”.“FACCOUNTBANKNO” “ACCOUNTBANKNO”, “T0”.“FREMARK” “REMARK”, “T0”.“FMATERIALNOID” “T4.ID”, “T0”.“FMATERIALNAME” “MATERIALNAME”, “T0”.“FSPEC” “SPEC”, “T0”.“FASSPROPERTYID” “T5.ID”, “T0”.“FUNITID” “T6.ID”, “T0”.“FSOURCE CURRENCYID” “T7.ID”, “T0”.“FSOURCEPAYAMT” “SOURCEPAYAMT”, “T0”.“FSURCEREQAMT” “SURCEREQAMT”, “T0”.“FSRCPPAYUNREQAMT” “SRCPPAYUNREQAMT”, “T0”.“FSRCUNREQAMT” “SRCUNREQAMT”, “T0”.“FCOREBILLTYPE” “COREBILLTYPE”, “T0”.“FCOREBILLID” “COREBILLID”, “T0”.“FCOREBILLLINENO” “COREBILLLINENO”, “T0”.“FTOTALPAYAMT” “TOTALPAYAMT”, “T0”.“FUNPAYAMOUNT” “UNPAYAMOUNT”, “T0”.“FASSTACTTYPEID” “T8.ID”, “T0”.“FEXPENSEITEMID” “T9.ID”, “T0”.“FEXPENSEITEMNAME” “EXPENSEITEMNAME”, “T0”.“FASSTACTNAME” “ASSTACTNAME”, “T0”.“FASSTACTNUMBER” “ASSTACTNUMBER”, “T0”. “FASSTACTID” “ASSTACTID”, “T0”.“FBANLANCETYPEID” “T10.ID”, “T0”.“FPAYBANKID” “T11.ID”, “T0”.“FPAYBANKACCOUNT” “PAYBANKACCOUNT”, “T0”.“FSRCBILTYPE” “SRCBILTYPE”, “T0”.“FSRCBILLNUMBER” “SRCBILLNUMBER”, “T0”.“FSOURCEBILLID” “SOURCEBILLID”, “T0”.“FSOURCEBILLNUMBER” “SOURCEBILLNUMBER”, “T0”.“FSOURCEBILLENTRYID” “SOURCEBILLENTRYID”, “T0”.“FSOURCEBILLENTRYSEQ” “SOURCEBILLENTRYSEQ”, “T0”.“FCOREBILLENTRYID” “COREBILLENTRYID”, “T0”.“FCOREBILLNUMBER” “COREBILLNUMBER”, “T0”.“FPROJECTID” “T12.ID”, “T0”.“FTRACKNUMBERID” “T13.ID”, “T0”.“FACCOUNTID” "T14.ID ", “T0”.“FOUTBGITEMNUMBER” “OUTBGITEMNUMBER”, “T0”.“FOUTBGITEMNAME” “OUTBGITEMNAME”, “T0”.“FOUTBGITEMID” “OUTBGITEM”, “T0”.“FACCOUNTBANK” “ACCOUNTBANK”, “T0”.“FCOREBILLTYPEID” “COREBILLTYPEID”, “T0”.“FLOCKAMOUNT” “LOCKAMOUNT”, “T0”.“FLOCKAMOUNTLOC” “LOCKAMOUNTLOC”, “T0”.“FPAYABLEDATE” “PAYABLEDATE”, “T0”.“FFUNDFLOWITEMID” “T15.ID”, “T0”.“FMBGNUMBER” “MBGNUMBER”, “T0”.“FMBGNAME” “MBGNAME”, “T0”.“FFUNDPROPERTYID” “T16.ID”, “T0”.“FISPAYPLANCREATED” “ISPAYPLANCREATED”, “T0”.“CFOACAIGOUSHENQINGDANDANHAO” “OACAIGOUSHENQINGDANDANHAO”, “T0”.“CFOAC AIGOUSHENQINGDANJINE” “OACAIGOUSHENQINGDANJINE”, “T0”.“CFPINPAI” “PINPAI”, “T0”.“CFHUOHAO” “HUOHAO”, “T0”.“CFXINGHAO” “XINGHAO” FROM “T_AP_PAYREQUESTBILLENTRY” “T0” INNER JOIN “T_AP_PAYREQUESTBILL” “T1” ON “T0”.“FPARENTID” = “T1”.“FID” WHERE “T1”.“FID” = :1 ORDER BY “T1.ID” ASC, “T0”.“FSEQ” ASC

“T_AP_PAYREQUESTBILLENTRY”是单据明细,

在无法改变查询的情况下如何优化?

收藏
分享
4条回答
默认
最新
杨卓

啥数据库? 驱动要看执行计划,Oracle内连接不是看左右表的位置确认驱动还是被驱动表的! oracle几个思路,统计信息不准确,收集统计信息; hint 指定驱动;无法调整SQL文本,可以绑定hint的执行计划到这个SQL里面。

暂无图片 评论
暂无图片 有用 0
Edward

oracle 11.2.0.4 RAC环境

image.png

Plan hash value: 2704651766


| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |

| 0 | SELECT STATEMENT | | 10 | 7670 | 10190 (1)| 00:02:03 |
| 1 | SORT ORDER BY | | 10 | 7670 | 10190 (1)| 00:02:03 |
| 2 | NESTED LOOPS | | 10 | 7670 | 10189 (1)| 00:02:03 |
|* 3 | INDEX UNIQUE SCAN| PK_KD_PAYRBID | 1 | 29 | 1 (0)| 00:00:01 |
|* 4 | TABLE ACCESS FULL| T_AP_PAYREQUESTBILLENTRY | 10 | 7380 | 10188 (1)| 00:02:03 |

Predicate Information (identified by operation id):

" 3 - access("“T1"”."“FID”"=:1)"
" 4 - filter("“T0"”."“FPARENTID”"=:1)"

暂无图片 评论
暂无图片 有用 0
杨卓

T_AP_PAYREQUESTBILLENTRY (FPARENTID,FSEQ DESC)
建议对被驱动表的全表扫描的表,Where子句中涉及的列,以及order by 的列,两个字段建一个联合索引。

暂无图片 评论
暂无图片 有用 0
Edward
问题已关闭: 问题已经得到解决
暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏