对已经排序的内部 table 进行排序是一种好习惯吗?
Is it a good practice to sort an internal table which is already sorted?
基于一个字段对内部 table(已经基于三个字段排序)进行排序以使用二进制搜索读取 table 是一种好习惯吗?
例如:
SORT itab by field1 field2 field3.
READ TABLE itab WITH KEY field1 = 'X'
field2 = 'Y'
field3 = 'Z' BINARY SEARCH.
SORT itab by field1.
READ TABLE itab WITH KEY field1 = 'X' BINARY SEARCH.
如果我再次根据 field1 对内部 table 进行排序以供二次读取 table 语句使用,是否可以?
这是非常糟糕的做法
如果省略第二个 SORT,您会得到相同的结果,但速度更快,因为内部 table 已经处于正确的顺序:
SORT itab by field1 field2 field3.
READ TABLE itab WITH KEY field1 = 'X'
field2 = 'Y'
field3 = 'Z' BINARY SEARCH.
READ TABLE itab WITH KEY field1 = 'X' BINARY SEARCH.
即使第二个 READ TABLE
是 field2
,你也应该省略 SORT
(当然还有 BINARY SEARCH
)。
从头到尾扫描一个 table 与行数成线性关系,但 SORT
+ BINARY SEARCH
即使在最好的情况下,速度也是 n+log(n)。
将 table 排序为仅读取一条记录是一种不好的做法。
排序和读取合并所需的工作量总是多于对未排序的进行一次读取所需的工作量table。
基于一个字段对内部 table(已经基于三个字段排序)进行排序以使用二进制搜索读取 table 是一种好习惯吗?
例如:
SORT itab by field1 field2 field3.
READ TABLE itab WITH KEY field1 = 'X'
field2 = 'Y'
field3 = 'Z' BINARY SEARCH.
SORT itab by field1.
READ TABLE itab WITH KEY field1 = 'X' BINARY SEARCH.
如果我再次根据 field1 对内部 table 进行排序以供二次读取 table 语句使用,是否可以?
这是非常糟糕的做法
如果省略第二个 SORT,您会得到相同的结果,但速度更快,因为内部 table 已经处于正确的顺序:
SORT itab by field1 field2 field3.
READ TABLE itab WITH KEY field1 = 'X'
field2 = 'Y'
field3 = 'Z' BINARY SEARCH.
READ TABLE itab WITH KEY field1 = 'X' BINARY SEARCH.
即使第二个 READ TABLE
是 field2
,你也应该省略 SORT
(当然还有 BINARY SEARCH
)。
从头到尾扫描一个 table 与行数成线性关系,但 SORT
+ BINARY SEARCH
即使在最好的情况下,速度也是 n+log(n)。
将 table 排序为仅读取一条记录是一种不好的做法。
排序和读取合并所需的工作量总是多于对未排序的进行一次读取所需的工作量table。