为了使用二进制搜索读取表的目的,基于一个字段对内部表(已经基于三个字段进行了排序)进行排序是一个好习惯吗?
例如:
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对内部表进行排序以便为第二个读表声明服务吗?
2 回答
这是非常糟糕的做法
你可以通过省略第二个SORT得到相同的结果,但速度要快得多,因为内部表格的顺序已经是正确的:
即使第二个
READ TABLE
是field2
,你也应该省略SORT
(当然还有BINARY SEARCH
) .从开始到结束扫描表格与行数呈线性关系,但即使在最佳情况下,
SORT
BINARY SEARCH
速度也是n log(n) .将表排序为仅读取一条记录是一种不好的做法 .
排序和读取组合所需的工作量总是超过在未排序的表上读取所需的工作量 .