Sobes.tech
Middle

Ce tipuri de indecși există în PostgreSQL?

sobes.tech AI

Răspuns de la AI

Există următoarele tipuri principale de indecși:

  1. B-tree (Arbore B) - cel mai răspândit tip, potrivit pentru majoritatea interogărilor tipice (egalitate, comparație, interval). Bazat pe un arbore echilibrat.

  2. Hash (Hash) - utilizat pentru verificarea egalității (=). Mai rapid decât B-tree pentru astfel de interogări, dar nu suportă comparații și intervale. Stochează valoarea hash a cheii și un pointer către rând.

  3. GiST (Generalized Search Tree) - structură de arbore de căutare generalizată care permite construirea diferitelor indecși pentru tipuri de date complexe (geometrice, text cu căutare full-text). Bazat pe un arbore echilibrat.

  4. SP-GiST (Space-Partitioned Generalized Search Tree) - versiune specializată a GiST pentru date care pot fi împărțite pe spațiu (de exemplu, puncte, dreptunghiuri). Exemple: arbori k-d, quadtrees.

  5. GIN (Generalized Inverted Index) - index inversat generalizat, în principal pentru căutarea elementelor în interiorul valorilor compuse (de exemplu, array-uri, JSONB). Folosit frecvent pentru căutarea full-text.

  6. BRIN (Block Range INdex) - index de interval de blocuri. Potrivit pentru tabele foarte mari cu date ordonate în mod natural (de exemplu, după timp). Indexează intervalul de valori în blocurile fizice ale discului.

  7. Bloom (Filtru Bloom) - nu este un index tradițional, ci o structură de date probabilistică pentru verificarea rapidă a absenței unui element. Folosit pentru accelerarea selecției din tabele foarte mari, când nu este necesară o potrivire exactă sau ca filtru suplimentar înainte de scanarea indexului principal.

Exemple de utilizare:

  • B-tree: index pe câmpuri numerice, date, șiruri pentru căutare pe interval (WHERE amount > 100).
  • Hash: rar folosit direct, deoarece B-tree este de obicei mai rapid pentru majoritatea sarcinilor.
  • GiST: indecși geospațiali (gist(location)), indecși pentru căutare full-text (to_tsvector).
  • SP-GiST: indecși pentru date bidimensionale (spgist(point)).
  • GIN: indecși pentru array-uri (gin(tags)), JSONB (gin(data)), căutare full-text.
  • BRIN: index pe câmpul timestamp din tabelele de log, unde datele sunt ordonate după timp.
  • Bloom: index pe un set de coloane (bloom(col1, col2, col3)) pentru eliminarea rapidă a rândurilor în care combinația de valori nu este prezentă.

Alegerea tipului de index depinde de tipul de date al coloanei și de tipul de interogări pe care doriți să le optimizați.