PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Postgres LIKE '...%' verwendet keinen Index

PostgreSQL wird dies tun, wenn Sie den Index mit text_pattern_ops erstellen -Operator oder wenn Sie die C-Sortierung verwenden.

Wenn Sie eine zufällige andere Sortierung verwenden, kann PostgreSQL nicht viel davon ableiten. Beachten Sie dies in der sehr verbreiteten Sortierung "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

Was dann natürlich zu dieser falschen Antwort bei Ihrer Anfrage führt:

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