ABAP核心进阶篇120篇SELECT查询语法优化12篇第十篇基于ST05/SAT工具的SELECT性能瓶颈定位与优化实战博客标题《基于ST05/SAT工具的SELECT性能瓶颈定位与优化实战》博客简介讲解ST05 SQL追踪、SAT性能分析工具的使用方法演示如何通过工具定位全表扫描、低效JOIN、重复查询等性能瓶颈结合实际优化案例梳理常见低效查询的特征与对应优化方案帮助开发者快速定位并解决查询性能问题。 写在前面当报表执行超过30秒、用户频繁投诉卡顿时靠猜测定位瓶颈是低效的。SAP提供了ST05和SATABAP Trace / SAT原SE30的继承者两大性能分析工具能精确到每条SQL的耗时、返回行数、索引使用情况。性能瓶颈定位ST05 SQL Trace追踪每条SQL的执行SAT 运行时分析全栈性能剖析全表扫描 / 低效JOIN重复查询 / SELECT *执行时间占比内存消耗热点ABAP/DB时间分离通过本文的学习你将掌握ST05 的激活、追踪、分析全流程SAT 运行时分析和内存分析的核心操作全表扫描、低效JOIN、重复查询的识别与优化四个真实优化案例从超时到秒级一、ST05 SQL追踪工具 1.1 操作步骤步骤操作事务码1激活追踪ST05→ 点击 “Activate Trace”2执行程序运行目标报表或事务3停止追踪ST05→ 点击 “Deactivate Trace”4查看结果点击 “Display Trace” 1.2 结果解读关键字段含义警戒阈值Duration单条SQL执行时间微秒1秒需关注Rows Fetched返回行数10万行应考虑限制Statement完整SQL语句出现SELECT *即优化点Index Used是否使用了索引NO INDEX 全表扫描 1.3 查看执行计划在 ST05 显示界面中选中一条 SQL → 点击 “Explain”可查看数据库优化器的执行计划是否使用索引、扫描方式、预估成本等。二、SAT 性能分析工具 2.1 SAT 是什么SATSystem Analysis Tools在旧版本中称为 SE30是 SAP 新一代性能分析工具可同时分析ABAP 执行时间、数据库时间、内存使用以调用树形式展示快速定位最耗时模块。 2.2 使用步骤事务码SAT→ 输入程序名 → 勾选 “Runtime Analysis” 和 “SQL Trace”点击 “Execute” 运行程序程序结束后自动跳转分析结果 2.3 核心分析维度分析类型关注点Hit List耗时最长的操作按DB/ABAP分类Call Hierarchy逐层展开调用链定位瓶颈所在FORM/METHODMemory检查内表内存峰值识别未释放或过大内表数据库与ABAP时间比例是优化方向的关键DB时间长 → 优化SQLABAP时间长 → 优化循环和内表算法。三、性能瓶颈识别与优化 3.1 全表扫描 瓶颈SQL执行3秒返回10万行未使用索引 SELECT * FROM ekko INTO TABLE DATA(lt_ekko) WHERE erdat BETWEEN 20230101 AND 20231231.优化SELECT ebeln, erdat, auart, netwr FROM ekko INTO TABLE DATA(lt_ekko) WHERE erdat BETWEEN 20230101 AND 20231231 UP TO 10000 ROWS.后续 ALV 展示时金额NETWR需设cfieldname WAERS。 3.2 LOOP内SELECT重复查询 驱动表1000行 → 数据库交互1000次总耗时10秒 LOOP AT lt_ekko INTO DATA(ls_ekko). SELECT * FROM ekpo INTO TABLE DATA(lt_tmp) WHERE ebeln ls_ekko-ebeln. ENDLOOP.优化IF lt_ekko IS NOT INITIAL. SELECT * FROM ekpo INTO TABLE DATA(lt_ekpo) FOR ALL ENTRIES IN lt_ekko WHERE ebeln lt_ekko-ebeln. ENDIF.数据库交互降至约1次耗时从10秒降至约0.5秒。 3.3 低效JOIN 4表JOIN返回20万行耗时40秒 SELECT ... FROM ekko INNER JOIN ekpo ... INNER JOIN makt ... INNER JOIN lfa1 ...优化分步查询 第一步仅关联核心表 SELECT e~ebeln, p~posnr, p~matnr, e~lifnr FROM ekko AS e INNER JOIN ekpo AS p ON e~ebeln p~ebeln INTO TABLE DATA(lt_core) UP TO 10000 ROWS. 第二步批量查询描述表 SELECT DISTINCT matnr FROM lt_core INTO TABLE DATA(lt_matnr). SELECT * FROM makt INTO TABLE DATA(lt_makt) FOR ALL ENTRIES IN lt_matnr WHERE matnr lt_matnr-matnr. 3.4 大数据量一次性加载内存溢出优化PACKAGE SIZE 分批SELECT ebeln, ebelp, matnr, menge FROM ekpo INTO TABLE DATA(lt_batch) PACKAGE SIZE 10000. 处理本批... COMMIT WORK AND WAIT. CLEAR lt_batch. ENDSELECT.每批1万条内存占用可控不会溢出。四、性能优化标准流程DB时间长ABAP时间长内存高发现性能问题ST05/SAT 追踪瓶颈类型优化SQL索引 / JOIN / FOR ALL ENTRIES优化循环 / 算法分批 / 释放 / 精简字段验证优化效果重新追踪对比五、总结瓶颈类型ST05/SAT特征一句话优化方案全表扫描Duration高Index UsedNO使用索引字段作为WHERE条件重复查询同SQL执行数百次改用 FOR ALL ENTRIES 或 JOIN低效JOIN多表关联返回数十万行分步查询先核心后描述大数据量Memory峰值高使用 PACKAGE SIZE 分批处理SELECT *返回所有字段明确列出所需字段核心要点ST05 是SQL优化的显微镜精确定位每一条SQL的耗时和索引使用SAT 提供全栈分析视角区分DB与ABAP耗时识别内存热点优化必须用工具验证前后对比确保改善而非猜测优化后若涉及ALV展示务必将金额/数量字段的参考字段cfieldname/qfieldname补全下一篇预告《SELECT查询语法优化系列总结篇》作者爱喝水的鱼丶版本记录2026年7月验证基准SAP NetWeaver 7.51 你在用ST05/SAT分析性能时发现过哪些意外的瓶颈欢迎留言分享案例