PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Postgres LIKE '...%' não usa índice


O PostgreSQL fará isso se você construir o índice com text_pattern_ops operador ou se estiver usando o agrupamento C.

Se você estiver usando algum outro agrupamento aleatório, o PostgreSQL não pode deduzir muito sobre isso. Observe isso, no agrupamento "en_US.utf8" muito comum.
select * from (values ('03.000221.1'), ('03.0002212'), ('03.000221.3')) f(x) order by x;
      x      
-------------
 03.000221.1
 03.0002212
 03.000221.3

O que naturalmente leva a essa resposta errada com sua consulta:
select * from (values ('03.000221.1'), ('03.0002212'), ('03.000221.3')) f(id)
    where ((id >= '03.000221.'::text) AND (id < '03.000221.Z'::text))
     id      
-------------
 03.000221.1
 03.0002212
 03.000221.3