Skip to content
Advertisement

Can SQL with CASE condition use index in PostgreSQL?

When I write a SQL like SELECT * FROM table WHERE table.col && object, I could use the index I built (as it support && operator), but with

It seems I can’t use the index?

What is the reason of this? Is there any way to solve it? Actually I want to implement a logic like CASE WHEN a&&b = true THEN a<b ELSE a>b END with the support of index, is that possible?

Advertisement

Answer

I am guessing that there is not situation where a case expression would use an index in Postgres. This is because the case expression enforces an order of evaluation — which is quite hard to ensure once indexes are involved.

There might be some exceptions where the compiler recognizes that the case expression is redundant and it gets removed before the optimization phase.

That said, your case expression is useless. Just use:

Notes:

  • The SQL Standard for boolean and is AND. Use it.
  • = true is redundant. You can include it, but it is not necessary.
  • You have two boolean columns. In many cases, an index will not be used even if available because the columns are (probably) not very selective.
User contributions licensed under: CC BY-SA
4 People found this is helpful
Advertisement