Thread: [PATCH] Optimize IS DISTINCT FROM NULL => IS NOT NULL
Hi list, This patch enables a simple optimization in eval_const_expressions_mutator. If we know that one argument to DistinctExpr is NULL then we can optimize it to a NullTest, which can be an indexable expression. For example the query: EXPLAIN (costs off) SELECT * FROM foo WHERE j IS NOT DISTINCT FROM NULL; Old behavior: Seq Scan on foo Filter: (NOT (j IS DISTINCT FROM NULL::integer)) New behavior: Index Scan using foo_j_idx on foo Index Cond: (j IS NULL) Regards, Marti
Attachment
Marti Raudsepp <marti@juffo.org> writes: > This patch enables a simple optimization in > eval_const_expressions_mutator. If we know that one argument to > DistinctExpr is NULL then we can optimize it to a NullTest, which can > be an indexable expression. Uh ... how much do we care about that? I can't say that I've heard many people complain about the fact that IS [NOT] DISTINCT FROM is poorly optimized -- which it is, in general, and this patch chips away at that only a tiny bit, not enough to make it recommendable. If we really wanted to make that a first-class operation we would need far more work than this. Plus I don't see why anyone would write the specific case "IS [NOT] DISTINCT FROM NULL" when they could write half as much. regards, tom lane
On Thu, Mar 8, 2012 at 19:35, Tom Lane <tgl@sss.pgh.pa.us> wrote: > Uh ... how much do we care about that? I can't say that I've heard many > people complain about the fact that IS [NOT] DISTINCT FROM is poorly > optimized -- which it is, in general, and this patch chips away at that > only a tiny bit, not enough to make it recommendable. Agreed, but it was very simple to code, so I figured why not. > Plus I don't see why anyone would write the specific case > "IS [NOT] DISTINCT FROM NULL" when they could write half as much. Well I can see how it might be useful in generated queries, when comparing a column to a parameter. If they're using IS DISTINCT FROM then it's reasonable to expect that the parameter could be NULL sometimes. But I don't feel strongly about this, maybe it's not worth complicating this big function further. :) Regards, Marti
Marti Raudsepp <marti@juffo.org> writes: > But I don't feel strongly about this, maybe it's not worth > complicating this big function further. :) Yeah, that was kind of what I felt about it. If this patch were part of a grand plan to make IS DISTINCT FROM smarter, that would be one thing. But if we were to embark on that, likely as not it would involve a redesign that would invalidate this code anyway. So I'd just as soon keep it simple for now. regards, tom lane