Dmitry Koterov <dmitry.kote...@gmail.com> writes: > PG13+. Assume we have two identical queries with no arguments (as a plain > text, e.g. passed to PQexec - NOT to PQexecParams!):
> - one with "a=X AND b IN(...)" > - and one with "a=X and b=ANY('{...}') > The question: is it guaranteed that the planner will always choose > identical plans for them (or, at least, the plan for ANY will not match an > existing index worse than the plan with IN)? This depends greatly on what "..." represents. But if it's a list of constants, they're probably equivalent. transformAExprIn() offers some caveats: * We try to generate a ScalarArrayOpExpr from IN/NOT IN, but this is only * possible if there is a suitable array type available. If not, we fall * back to a boolean condition tree with multiple copies of the lefthand * expression. Also, any IN-list items that contain Vars are handled as * separate boolean conditions, because that gives the planner more scope * for optimization on such clauses. regards, tom lane