PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Postgres LIKE '...%' n'utilise pas l'index

PostgreSQL le fera si vous construisez l'index avec text_pattern_ops opérateur ou si vous utilisez le classement C.

Si vous utilisez un autre classement aléatoire, PostgreSQL ne peut pas en déduire grand-chose. Observez ceci, dans le classement très courant "en_US.utf8".

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

Ce qui conduit alors naturellement à cette mauvaise réponse avec votre requête :

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