11.1.     数据库编程方面优化

1.   不要使用 SELECT * ...,选择需要的字段, SELECT * 既浪费CPU,又浪费网络带宽资源,还需占用大量的ABAP内存

2.   不要使用SELECT DISTINCT ...,会绕过缓存,可使用 SORT BY + DELETE ADJACENT DUPLICATES 代替

3.   少用相关子查询,因为子查询对外层查询结果集中的每条记录都会执行一次

4.   少用嵌套SELECT … ENDSELECT,可以使用联合查询或FOR ALL ENTRIES来替换,减少循环次数

5.   如果确定只查一条数据时,使用 SELECT SINGLE... 或者是 SELECT ...UP TO 1 ROWS ...

6.   统计时,直接使用SQL聚合函数,而不是将数据读取出来后在程序里再进行统计

7.   使用游标读取数据,这样省掉了将从数据库中的取记录放入内表的INTO语句这一过程开销

8.   多使用inner join,必要时才使用left join

9.   inner join条件放置的位置应该按照 On、Where、Having的顺序放,因为SQL条件的的执行一般是按这个顺序来执行的,将条件放在最开始执行,则可过滤掉大部数据;但要注意Left Outer Join,是否可以将ON中的条件移动到Where从句则要考虑(如果真能放在Where从句中,则应该使用Inner Join,而非Left Outer Join,因为Where条件会过滤掉哪些包括在右表中不存在的左表数据),因为此时条件放在On后面与放在Where语句后面结果是不一样的(因为不管on中的条件是否为真,左表中在右边表不存在的数据也会被返回,但如放在where条件中,则会对On产生的数据再次过滤的条件,会滤掉不满足条件的记录——包括左表在右表中找不到的记录,这时已经没有left join的含义)

10.  要根据主键或索引字段查找数据,且WHERE从句中的条件字段需按INDEX字段顺序书写,且将索引字段条件靠前(左边),如:在VBFA表中查找SO所对应的交货单DN,因为如果直接到LIPS中找时,SO的订单中号与行号在LIPS中非主键,但在VBFA是部分主键(VBFA中根据部分主键查找 SO -> DN; 根据索引查找 SO -> PO,VBFA-VBELN+VBFA-POSNN组合字段上创建了索引,即根据SO找PO时,不要从EKKN关联表中查找,而是通过VBFA中查找。后来查看EKKN,发现在VBELN+VBELP字段上创建了索引,所以从VBFA与EKKO查找应该差不多,主要看哪个表数据量少的问题了)

检查条件组合字段是否是主键,或者是上在上面创建了索引,避免条件组合字段即不是主键又没有索引

11.使用部分索引字段问题:如果一个索引是由多个字段组成的,只使用一部分关键字段来进行查询时,也是可以使用到索引,但使用时要注意要按照索引定义的顺序且取其前面部分

12.  请根据索引字段进行ORDER BY,否则通过程序进行SORT BY。与其在数据库在通过非索引字段进行排序,不如在程序中使用SORT BY语句进行排序,因为此情况下应用服务器上的执行速度要比数据库服务器快(应用服务器上采用的是内存排序)

13.避免在索引字段上使用:

not、<>、!=、IS NULL、IS NOT NULL

避免使用 LIKE,但LIKE '销售组1000'和LIKE '销售组1000%'可以用到,而LIKE '%销售组1000'(百分号前置)则用不到索引

不要使用OR来连接多个索引字段;对于同一索引字段,可以使用IN来替代OR:


14.避免使用以下语句,因为使用这些语句时,不能使用 Table Buffer

Aggregate expressions

l  Select distinct

l  Select …for update

Order bygroup byhaving从句

Joins,使用JOIN时,会绕过SAP缓存,可以使用FOR ALL ENTRIES来代替

l  WHERE从句中使用Sub queries(子查询)

l  WHERE从句中使用IS NULL条件

15.在下面情况下使用FOR ALL ENTRIES IN:

l  在循环内表 LOOP...AT Itab中循环访问数据库

l  簇表是禁止JOIN的表类型, 当需要联接簇表查询数据时,如:BSEG(会计凭证)、KONV(条件表)

簇表一般是由多个表组成,簇表中的数据来自于多个表,有点像视图,但不能直接通过簇表进行数据维护

JOIN超过3个表会出现性能问题, 当使用JOIN联接的表超过3个时

如果两个表的数据非常大时(上百万),使用JOIN进行联合查询会很慢,此时改用FOR ALL ENTRIES IN

16.使用内表批量操作数据库,而不要使用工作区一条条操作,如:

SELECT ... INTO TABLE itab
INSERT dbtab FROM TABLE itab
DELETE dbtab FROM TABLE itab
UPDATE/MODIFY dbtab FROM TABLE itab

17.如果你使用 CLIENT SPECIFIED,需在WHERE从句第一个位置上指明 MANDT条件,否则使用不到索引

[SAP ABAP开发技术总结]ABAP调优——Open SQL优化相关推荐

  1. [SAP ABAP开发技术总结]ABAP调优——代码优化

    11.2.     程序 1.   READ TABLE ...WITH [TABLE] KEY...BINARY SEARCH读取标准内表使用二分查找 2.   在循环(LOOP AT ...WHE ...

  2. [SAP ABAP开发技术总结]ABAP读写、解析XML文件

    20.6.         XML. 236 20.6.1.     生成... 237 20.6.2.     解析... 240 20.6.     XML if_ixml if_ixml_doc ...

  3. 内核网络中的GRO、RFS、RPS技术介绍和调优

    内核网络中的GRO.RFS.RPS技术介绍和调优 1. 前言 2. GRO(Generic Receive Offloading) 2.1 使用 ethtool 修改 GRO 配置 2.2 napi_ ...

  4. Tomcat调优和JVM优化

    title: Tomcat调优和JVM优化 date: 2018-7-22 19:27:56 tags: [Tomcat,Java,JVM] categories: [JVM] Tomcat本身优化 ...

  5. 通过案例学调优之--SQL Profile

    通过案例学调优之--SQL Profile 一.什么是SQL Profile(概要) SQL Profile在性能优化中占有一个重要的位置. MOS里这么描述SQL Profile: SQL Prof ...

  6. 十八般武艺玩转GaussDB(DWS)性能调优:SQL改写

    摘要:本文将系统介绍在GaussDB(DWS)系统中影响性能的坏味道SQL及SQL模式,帮助大家能够从原理层面尽快识别这些坏味道SQL,在调优过程中及时发现问题,进行整改. 数据库的应用中,充斥着坏味 ...

  7. Java性能优化,操作系统内核性能调优,JYM优化,Tomcat调优

    文章目录 Java性能优化 尽量在合适的场合使用单例 尽量避免随意使用静态变量 尽量避免过多过常地创建Java对象 尽量使用final修饰符 尽量使用局部变量 尽量处理好包装类型和基本类型两者的使用场 ...

  8. R语言使用caret包对GBM模型自定义参数调优:自定义优化参数网格、可视化核心参数与评估指标关系、Accuracy与树的深度、个数的关系、Kappa与树的深度、个数的关系

    R语言使用caret包对GBM模型自定义参数调优:自定义优化参数网格.可视化核心参数与评估指标关系.Accuracy与树的深度.个数的关系.Kappa与树的深度.个数的关系 目录 R语言使用caret ...

  9. 11g新特性-自动sql调优(Automatic SQL Tuning)

    11g新特性-自动sql调优(Automatic SQL Tuning) 在Oracle 10g中,引进了自动sql调优特性.此外,ADDM也会监控捕获高负载的sql语句. 在Oracle 11g中, ...

最新文章

  1. Android SDK Tools Setup 提示 “ java se development kit not found”
  2. 《Java虚拟机原理图解》5. JVM类加载器机制与类加载过程
  3. 用 Spark 为 Elasticsearch 导入搜索数据
  4. JAVA黑白圆圈图形_CSS3 黑白交替旋转圆圈
  5. 路由器交换机命令总结
  6. 珠宝条码打印扫描解决方案
  7. python根须系统斜杠_深入浅出Python中的os模块
  8. 大数据之Spark教程
  9. 我在阿里云做产品:如何打出一个爆款云服务器? | 凌云时刻
  10. Android混淆配置(含androidx、kotlin)
  11. 《测绘综合能力》——摄影测量与遥感
  12. 规则引擎 clara-rules
  13. 故障树FTA(fault tree analysis)工具链
  14. java 穷举_java循环穷举
  15. vue 项目使用 Clipboard-复制文本或图片到剪贴板
  16. EXCEL表格-矩阵法快速判断异常数据
  17. 1.3-15:苹果和虫子
  18. 新媒体运营教程:线上线下用户转化的核心流程!
  19. GO语言基础----简易计算器
  20. 程序员必读经典书籍 (转)

热门文章

  1. angular cli中的--flat参数
  2. HDU 1285:确定比赛名次(拓扑排序)
  3. [大妈吐糟] 虾米音乐的系列猜想
  4. 三部委明确能源互联网建设10重点
  5. saiku 展示优化
  6. 在windows7家庭版安装软件时可能存在的问题
  7. AtomicInteger简介
  8. C++ Exercises(十六)---Ethernet帧包结构解析
  9. 基于vue(element ui) + ssm + shiro 的权限框架
  10. 这段百度问答,对我相关有对啊!!!----如何获取Windows系统登陆用户名