1

为了使用二进制搜索读取表的目的,基于一个字段对内部表(已经基于三个字段排序)进行排序是一种好习惯吗?

例如:

  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 再次对内部表进行排序以用于第二次读取表语句的目的,是否可以?

4

2 回答 2

1

对表进行排序以仅读取一条记录是一种不好的做法。

排序和读取组合所需的工作量总是大于在未排序表上进行一次读取所需的工作量。

于 2017-05-16T20:59:26.663 回答
1

这是非常糟糕的做法

通过省略第二个 SORT,您将获得相同的结果,但速度更快,因为内部表的顺序已经正确:

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是 by field2,您也应该省略 the SORT(当然BINARY SEARCH也可以省略)。
从头到尾扫描表格与行数成线性关系,但SORT+BINARY SEARCH速度即使在最好的情况下也是 n+log(n)。

于 2017-05-16T09:18:56.980 回答