evaluates true rows using an index to locate the true rows in each segment of the table. The index evaluation process generates a list of row IDs per segment. EVAL 1 accepts WHERE clause operators for equivalency expressions such as EQ, =, LE, <=, LT, <, GE, >=, GT, >, IN, and BETWEEN. EVAL 1 uses threaded parallel processing across the index segments to permit concurrent evaluation of multiple indexes. EVAL 1 combines multiple segment bitmaps from queries that use multiple indexes to generate the list of row IDs per segment.
takes true rows as determined by EVAL 1, EVAL 3, or EVAL 4, and then eliminates any rows shown to be false, leaving a table that contains only true rows. EVAL 2 processes all rows of a table when no index evaluation is possible. For example, no index evaluation is possible when an index is not present or when some predecessor function performs an operation that invalidates the index.
a single index sequential process. Use EVAL 3 when the number of rows returned by an index is unique or nearly unique (when cardinality ratio is high). EVAL 3 returns a list of true rows for the entire table. EVAL 3 supports only the equality operators EQ and =.
similar to EVAL 3 but supports a larger set of inequality and inclusion operators, such as IN, GT, GE, LT, LE, and BETWEEN.
can operate when the server index scan facility is used. The EVAL 5 strategy uses index metadata and aggregate SQL functions to evaluate true rows. The EVAL 5 strategy does not require a table scan.
count(*) where x=5
emulates the behavior of EVAL 2. With EVAL 6, the query is a candidate for Hadoop WHERE processing. If the Hadoop WHERE processing fails, EVAL 6 reverts to the EVAL 2 operation. EVAL 6 takes true rows as determined by EVAL 1, EVAL 3, or EVAL 4, and then eliminates any rows shown to be false, leaving a table that contains only true rows. EVAL 2 processes all rows of a table when no index evaluation is possible. For example, no index evaluation is possible when an index is not present or when some predecessor function performs an operation that invalidates the index.
%let SPDSWDEB=YES;
where
a = 1 and b in (1 2 3) and d = 3 and (d + 3 = c)
1:whinit: WHERE ((A=1) and B in (1, 2, 3) and (D=3) and (C=(D+3))) 2:whinit: wh-tree presented 3: /-NAME = [A] 4: /-CEQ----| 5: | \-LITN = [1] 6: --LAND---| 7: | /-NAME = [B] 8: |--IN-----| 9: | | /-LITN = [1] 10: | \-SET----| 11: | |--LITN = [2] 12: | \-LITN = [3] 13: | /-NAME = [D] 14: |--CEQ----| 15: | \-LITN = [3] 16: | /-NAME = [C] 17: \-CEQ----| 18: | /-NAME = [D] 19: \-AADD---| 20: \-LITN = [3] 21:whinit: wh-tree after split 22: /-NAME = [C] 23: --CEQ----| 24: | /-NAME = [D] 25: \-AADD---| 26: \-LITN = [3] 27:whinit: SBM-INDEX D uses 50% of segs (WITHIN maxsegratio 75%) 28:whinit: INDEX tree after split 29: /-NAME = [A] <1>SBM-INDEX IDX_ABC (A,B) 30: /-CEQ----| 31: | \-LITN = [1] 32: --LAND---| 33: | /-NAME = [B] 34: |--IN-----| 35: | | /-LITN = [1] 36: | \-SET----| 37: | |--LITN = [2] 38: | \-LITN = [3] 39: | /-NAME = [D] <2>SBM-INDEX D (D) 40: \-CEQ----| 41: \-LITN = [3] 42:whinit returns: ALL EVAL1(w/SEGLIST) EVAL2
where
a = 1 and b in (1 2 3) and d = 3
, then it will use EVAL2
to determine whether c = d + 3
is true on
these rows.
where d = 3
could
never be true. In this case, WHINIT would have pruned this predicate
because it is logically impossible, or FALSE. Pruning can also affect
higher nodes. If the d = 3 predicate were
deemed FALSE, then the AND subtree would also be FALSE and would also
have been pruned.
where a = 1 and b
in (1 2 3) and c in (4 5)
, it will generate all permutations
of this compound key, probing the index for each value. In the example,
six values are generated: