Description
WhereOptimizer runs very slow in parsing sql like "where A in (a1, a2, ..., a_N) and B = X" when N is very large. In our environment, it runs > 90s for N = 140000.
This is because for the same instance of InListExpression, InListExpression.hashCode() is calculate every time, where InListExpression.values is traversed.
In previous sql, InListExpression.hashCode() will be called N times, and InListExpression.values has N elements. Therefore the total complexity is N^2.
Saving the hashCode of InListExpression can reduce the complexity to N. The test shows the large sql can be finished within 5 seconds.