PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

MNIEJSZE PODOBNE vs iLIKE

Odpowiedź zależy od wielu czynników, takich jak wersja Postgresa, kodowanie i lokalizacja — LC_COLLATE w szczególności.

Samo wyrażenie lower(description) LIKE '%abc%' jest zazwyczaj nieco szybszy niż description ILIKE '%abc%' , a oba są nieco szybsze niż równoważne wyrażenie regularne:description ~* 'abc' . Ma to znaczenie w przypadku skanowań sekwencyjnych, w których wyrażenie musi zostać ocenione dla każdego testowanego wiersza.

Ale w przypadku dużych tabel, które pokazujesz w swojej odpowiedzi, z pewnością użyjesz indeksu. W przypadku dowolnych wzorców (nie tylko zakotwiczonych w lewo) proponuję indeks trygramów za pomocą dodatkowego modułu pg_trgm . Następnie mówimy o milisekundach zamiast sekundach, a różnica między powyższymi wyrażeniami jest zerowana.

Indeksy GIN i GiST (przy użyciu gin_trgm_ops lub gist_trgm_ops klasy operatorów) obsługują LIKE (~~ ), ILIKE (~~* ), ~ , ~* (i kilka innych wariantów). Z trygramowym indeksem GIN na description (zwykle większe niż GiST, ale szybsze w przypadku odczytów), w zapytaniu użyto by description ILIKE 'case_insensitive_pattern' .

Powiązane:

  • Odmiany wydajności zapytań PostgreSQL LIKE
  • Podobne ciągi UTF-8 dla pola autouzupełniania

Podstawy dopasowywania wzorców w Postgresie:

  • Dopasowywanie wzorców za pomocą LIKE, SIMILAR TO lub wyrażeń regularnych w PostgreSQL

Podczas pracy ze wspomnianym indeksem trygramów jest zazwyczaj bardziej praktyczne w pracy z:

description ILIKE '%abc%'

Lub z operatorem regexp niewrażliwym na wielkość liter (bez % symbole wieloznaczne):

description ~* 'abc'

Indeks na (description) nie obsługuje zapytań na lower(description) jak:

lower(description) LIKE '%abc%'

I wzajemnie.

Z predykatami na lower(description) wyłącznie , indeks wyrażenia jest nieco lepszą opcją.

We wszystkich innych przypadkach indeks (description) jest preferowany, ponieważ obsługuje oba predykaty rozróżniające wielkość liter i -niewrażliwe.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wystąpił wyjątek DBConcurrency podczas aktualizacji za pomocą adaptera danych

  2. Odejmij dni od daty w PostgreSQL

  3. Najlepsze praktyki bezpieczeństwa PostgreSQL

  4. Jak używać ALIAS w klauzuli PostgreSQL ORDER BY?

  5. Zdarzenie ROLLBACK wyzwalacze w postgresql