sql >> Databáze >  >> RDS >> PostgreSQL

Postgres LIKE '...%' nepoužívá index

PostgreSQL to udělá, pokud vytváříte index pomocí text_pattern_ops nebo pokud používáte řazení C.

Pokud používáte nějaké náhodné jiné řazení, PostgreSQL z toho nemůže nic moc odvodit. Všimněte si toho ve velmi běžném řazení "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

Což pak přirozeně vede k této špatné odpovědi s vaším dotazem:

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



  1. Předávání FieldName jako parametru v MySQL uložené proceduře

  2. Ukládání a porovnávání jedinečných kombinací

  3. Získejte první pondělí v roce v SQLite

  4. Jak můžeme definovat velikost výstupního parametru v uložené proceduře?