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