Sobes.tech
Junior

În ce cazuri sunt utilizate indicii în bazele de date?

sobes.tech AI

Răspuns de la AI

Indecii din bazele de date sunt folosiți pentru a optimiza viteza de executare a interogărilor, în special:

  • Căutarea datelor: Accelerarea operațiunilor SELECT, în special cu condiții WHERE, JOIN și ORDER BY. Indicele permite SGBD-ului să găsească mai rapid rândurile necesare, fără a scana întreaga tabelă.
  • Sortare: Accelerarea sortării cu ORDER BY. Dacă coloanele de sortare au un index, SGBD-ul poate să le utilizeze, evitând operații suplimentare de sortare.
  • Îmbinarea tabelelor: Accelerarea operațiunilor JOIN pe coloane indexate. Indicele ajută la găsirea rapidă a rândurilor corespunzătoare în tabelele legate.
  • Unicitatea datelor: Garanția unicitații valorilor dintr-o coloană (printr-un index unic).
  • Cheile primare: Cheia primară este, implicit, un index unic și este folosită pentru acces rapid la rând printr-un identificator unic.
  • Cheile secundare: Sunt folosite pentru a asigura integritatea referențială și pentru a accelera operațiunile JOIN între tabele legate.

Exemple de coloane pentru indexare:

  • Coloane căutate frecvent (WHERE uid = 123).
  • Coloane folosite în condiții JOIN (table1.id = table2.ref_id).
  • Coloane frecvent sortate (ORDER BY created_at DESC).
  • Coloane cu cardinalitate ridicată (mulți valori unice).

Cazuri în care indecșii pot fi ineficienți sau inutili:

  • Tabele foarte mici: În tabele mici, scanarea poate fi mai rapidă sau comparabilă cu căutarea după index.
  • Coloane cu cardinalitate scăzută: Un index pe o coloană cu puține valori unice (de exemplu, un câmp boolean TRUE/FALSE) poate să nu aducă o accelerare semnificativă.
  • Operațiuni frecvente de scriere (INSERT, UPDATE, DELETE): Indecșii necesită actualizare la modificarea datelor, ceea ce poate încetini operațiunile de scriere. Nu este recomandat să indexați toate coloanele aleatoriu.
  • Coloane în condiții WHERE cu funcții: Dacă se aplică o funcție pe coloană în WHERE (de exemplu, WHERE YEAR(date_column) = 2023), indexul normal pe date_column nu este utilizat. Se poate folosi un index funcțional (dacă este suportat de SGBD) sau se rescrie interogarea.