关于 ABAP 索引

作者:斌将军 约 4 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, CO, Data Engineering, FI, WM, 仓库管理, 开发, 数据工程, 财务
关于 ABAP 索引 - 封面图
关于 ABAP 索引 - 封面图

如果把数据库表看做一本书,索引就可以看做书的检索目录。目录中包含书中的大小标题(部分字段数据),并且有对应的数据表条目的页码(指针),可以快速的访问数据库表中对应行的所有字段内容

**一个表中包含一个主索引和多个二级索引**

**主索引:** 是系统根据表关键字自动创建的,用户不需要创建。

索引字段的组合,在表中只存在最多一条记录。如果未选择主索引中的字段,则会扫描全表或尝试使用合适的二级索引

****二级索引:** ** 是用户自定义的,索引ID为三位字符,ID

0为主索引。内置数据类型STRING、RAWSRING和GEOM_EWKB与参考数据类型为FLTP的表字段,都不能作为索引字段

二级索引可分为唯一或非唯一:

**唯一索引:** 要求在数据库表中不能包含索引字段中具有相同值的多行数据。

**非唯一索引:**

在访问数据库时,数据库的优化器检查是否存在合适的索引,所选索引依赖于平台,所以可以在ABAP字典中定义非唯一索引是否应用于哪些数据库系统

• 所有数据库系统中的索引:索引是在每个数据库上创建的

• 在选定的数据库系统中:可以使用选择列表或排除列表来定义数据库系统,每个列表最多有四个条目

• 没有数据库索引:不应在任何数据库上创建索引。此设置,可以从数据库中删除现有的辅助索引。

事务代码:SE11

索引页签,创建索引

关于 ABAP 索引 - 封面图
关于 ABAP 索引 - 封面图

创建一个非唯一索引

关于 ABAP 索引 - 封面图
关于 ABAP 索引 - 封面图

• 将索引字段放在where条件的最靠前位置,更能发挥作用

• 使用索引时需要注意,索引只能由几个字段组成,通常不超过四个。

• 为任何一个表创建的索引不应该超过五个,否则将导致过高的更新成本。

• 某些数据库系统索引会忽略零值,所以在按零值进行选择时不能使用索引。如果有必要,可以在ABAP中使用%_hints指定数据库,以在选择辅助索引时调整数据库系统优化器

SELECT matnr, werks, maktx FROM yttest001INTO TABLE @DATA(lt_test001)WHERE matnr = '000000000000007777' AND maktx = 'XX'  %_HINTS ORACLE 'index(YTTEST001"Z1")'.* %_HINTS HDB 'Z1'.

• 优化器在以下SELECT语句中遇到OR时会停止工作

SELECT * FROM yttest001 WHERE ( matnr = '111' OR matnr = '222' ) AND maktx = 'XX'.可以优化为:SELECT * FROM yttest001 WHERE ( matnr = '111' AND maktx = 'XX' ) OR ( matnr = '222' AND maktx = 'XX' ).
斌将军

关于作者:斌将军

企业信息化与 SAP 技术顾问,长期专注 SAP ABAP、FI/CO、MM、SD 等模块的技术分享与实战经验总结。查看更多介绍

来源说明:本文内容由「关于ABAP索引.md」整理生成,仅用于内部技术分享与学习交流。