Abap 排序顺序是否用于带有或的WHERE条件

Abap 排序顺序是否用于带有或的WHERE条件,abap,Abap,如果我有一个内部表lt_itab,其类型按werks matnr排序,那么这个循环是否进行二进制搜索 LOOP AT lt_itab INTO ls_itab WHERE ( werks = space OR werks = '*' ). 或者或强制进行线性扫描吗?它应该是线性扫描 与FILTER操作符一样,我认为只能在中使用和进行连接,以确保它是二进制搜索 对于散列键,每个键组件正好有一个比较表达式。op唯一允许的关系运算符是=,也就是确保搜索是O(1)它应该是线性扫描 与FILTE

如果我有一个内部表
lt_itab
,其类型按
werks matnr
排序,那么这个循环是否进行二进制搜索

LOOP AT lt_itab INTO ls_itab
    WHERE ( werks = space OR werks = '*' ).

或者
强制进行线性扫描吗?

它应该是线性扫描

FILTER
操作符一样,我认为只能在
中使用
进行连接,以确保它是二进制搜索


对于散列键,每个键组件正好有一个比较表达式。
op
唯一允许的关系运算符是
=
,也就是确保搜索是
O(1)

它应该是线性扫描

FILTER
操作符一样,我认为只能在
中使用
进行连接,以确保它是二进制搜索

对于散列键,每个键组件正好有一个比较表达式。
op
唯一允许的关系运算符是
=
,也就是确保搜索是
O(1)

这是一个线性扫描 我已经建立了一个有1亿行的小测试程序。OR使循环速度降低约150倍。

这是一种线性扫描
我已经建立了一个有1亿行的小测试程序。OR使循环速度降低约150倍。

来自官方文档:

如果使用键后未指定显式表键名称,则顺序为 读取行的位置取决于表类别,如下所示:

标准表和排序表。行按升序行读取 主表索引中的数字。在每个循环过程中,系统 字段sy tabix包含列表中当前行的行号 主表索引

哈希表。按行的处理顺序处理行 插入到表中,并按语句后使用的排序顺序插入 分类在每个循环过程中,系统字段sy tabix包含值 0

循环将继续运行,直到所有表行满足条件 条件已被读取或直到它与语句一起退出。如果没有 找到适当的行,或者如果内部表为空,则循环 它根本不运行

循环不进行二进制搜索,因为它不是搜索,而是循环,即迭代
lt\u itab
中的每一行


来自官方文件:

如果使用键后未指定显式表键名称,则顺序为 读取行的位置取决于表类别,如下所示:

标准表和排序表。行按升序行读取 主表索引中的数字。在每个循环过程中,系统 字段sy tabix包含列表中当前行的行号 主表索引

哈希表。按行的处理顺序处理行 插入到表中,并按语句后使用的排序顺序插入 分类在每个循环过程中,系统字段sy tabix包含值 0

循环将继续运行,直到所有表行满足条件 条件已被读取或直到它与语句一起退出。如果没有 找到适当的行,或者如果内部表为空,则循环 它根本不运行

循环不进行二进制搜索,因为它不是搜索,而是循环,即迭代
lt\u itab
中的每一行


我不知道abap,但我相信它具有解释查询计划的功能(许多数据库都有)。你能让数据库告诉你它将如何执行它吗?这不是一个db请求表是用key
werks
排序的,你正在检查key是初始的还是星号的?这是一个非唯一的键吗?@Jagger这完全不相关,但我编辑了这个问题,以避免旁道。我不知道abap,但我相信它具有
解释
查询计划的功能(许多数据库都有)。你能让数据库告诉你它将如何执行它吗?这不是一个db请求表是用key
werks
排序的,你正在检查key是初始的还是星号的?这是一个非唯一的键吗?@Jagger这完全无关,但我编辑了这个问题,以避免旁白