The binary algorithm used by SEARCH ALL is far more efficient for large tables than the one used by SEARCH. While it’s
not always possible to use SEARCH ALL, it should be the preferred algorithm.
This rule raises an issue when tables with more than the specified number of possible entries are searched using SEARCH.
Noncompliant code example
Using the default threshold of 500:
01 MY-TABLE.
05 MY-TAB-ELEM OCCURS 300000
INDEXED BY MY-TAB-IND.
10 MY-ATTR1 PIC X(07).
10 MY-ATTR2 PIC X(07).
10 MY-ATTR3 PIC X(07).
01 MY-TAB2.
05 MY-TAB2-ELEM OCCURS 300000
ASCENDING MY-ATTR1 *> Key is defined. Why not use it?
INDEXED BY MY-TAB-IND.
10 MY-ATTR1 PIC X(07).
10 MY-ATTR2 PIC X(07).
10 MY-ATTR3 PIC X(07).
01 MY-TAB-IND PIC 9(08).
SEARCH MY-TAB-ELEM. *> Noncompliant; define a key & use binary search
AT END...
SEARCH MY-TAB2-ELEM. *> Noncompliant
AT END...
Compliant solution
01 MY-TABLE.
05 MY-TAB-ELEM OCCURS 300000
ASCENDING MY-ATTR1
INDEXED BY MY-TAB-IND.
10 MY-ATTR1 PIC X(07).
10 MY-ATTR2 PIC X(07).
10 MY-ATTR3 PIC X(07).
01 MY-TAB2.
05 MY-TAB2-ELEM OCCURS 300000
ASCENDING MY-ATTR1
INDEXED BY MY-TAB-IND.
10 MY-ATTR1 PIC X(07).
10 MY-ATTR2 PIC X(07).
10 MY-ATTR3 PIC X(07).
01 MY-TAB-IND PIC 9(08).
SEARCH ALL MY-TAB-ELEM.
AT END...
SEARCH ALL MY-TAB2-ELEM.
AT END...