=== doris-0001: BindExpression.processNonStandardAggregate — List.contains per projection → O(P×G) ===
N=100   k=100  : defective=0.085ms  fixed=0.003ms  speedup=24.5x
N=500   k=500  : defective=2.120ms  fixed=0.020ms  speedup=104.2x
N=1000  k=1000 : defective=8.486ms  fixed=0.044ms  speedup=194.7x
N=2000  k=2000 : defective=34.519ms  fixed=0.093ms  speedup=371.7x

=== doris-0002: PlanNode.addConjunct — ArrayList.contains() O(C²) dedup ===
N=100   k=100  : defective=0.081ms  fixed=0.003ms  speedup=24.5x
N=500   k=500  : defective=2.116ms  fixed=0.020ms  speedup=103.5x
N=1000  k=1000 : defective=8.813ms  fixed=0.045ms  speedup=194.0x
N=2000  k=2000 : defective=35.257ms  fixed=0.098ms  speedup=360.5x

=== doris-0003: EquivalenceClass.getEquivalenceSetList — O(N²) List.contains dedup ===
N=100   k=100  : defective=0.084ms  fixed=0.003ms  speedup=24.5x
N=500   k=500  : defective=2.202ms  fixed=0.021ms  speedup=106.4x
N=1000  k=1000 : defective=8.735ms  fixed=0.046ms  speedup=191.5x
N=2000  k=2000 : defective=33.644ms  fixed=0.093ms  speedup=360.3x

=== doris-0004: NormalizeRepeat.buildContextWithAlias — List.contains O(S×G) for GROUPING SETS ===
N=100   k=100  : defective=0.081ms  fixed=0.003ms  speedup=24.9x
N=500   k=500  : defective=2.028ms  fixed=0.020ms  speedup=100.4x
N=1000  k=1000 : defective=8.780ms  fixed=0.046ms  speedup=190.3x
N=2000  k=2000 : defective=35.650ms  fixed=0.097ms  speedup=366.4x

