Sobes.tech
Junior

V akých prípadoch sa používajú indexy v databázach?

sobes.tech AI

Odpoveď od AI

Indexy v databázach sa používajú na optimalizáciu rýchlosti vykonávania dotazov, najmä:

  • Vyhľadávanie údajov: Zrýchlenie operácií SELECT, najmä s podmienkami WHERE, JOIN a ORDER BY. Index umožňuje DBMS rýchlejšie nájsť potrebné riadky bez skenovania celej tabuľky.
  • Triedenie: Zrýchlenie triedenia pomocou ORDER BY. Ak je na stĺpcoch triedenia index, DBMS ho môže použiť na zachovanie poradia, čím sa vyhýba ďalším operáciám triedenia.
  • Spojenie tabuliek: Zrýchlenie operácií JOIN na indexovaných stĺpcoch. Index pomáha rýchlo nájsť zodpovedajúce riadky v súvisiacich tabuľkách.
  • Jedinečnosť údajov: Záruka jedinečnosti hodnôt v stĺpci (cez jedinečný index).
  • Primárne kľúče: Primárny kľúč je predvolený ako jedinečný index a slúži na rýchly prístup k riadku podľa jedinečného identifikátora.
  • Sekundárne kľúče: Používajú sa na zabezpečenie referenčnej integrity údajov a zrýchlenie operácií JOIN medzi súvisiacimi tabuľkami.

Príklady stĺpcov na indexovanie:

  • Stĺpce, na ktorých sa často vykonáva vyhľadávanie (WHERE uid = 123).
  • Stĺpce používané v podmienkach JOIN (table1.id = table2.ref_id).
  • Stĺpce, na ktorých sa často vykonáva triedenie (ORDER BY created_at DESC).
  • Stĺpce s vysokou kardinalitou (veľa jedinečných hodnôt).

Prípadové situácie, keď indexy môžu byť neefektívne alebo zbytočné:

  • Veľmi malé tabuľky: V malých tabuľkách môže byť skenovanie rýchlejšie alebo porovnateľné s vyhľadávaním pomocou indexu.
  • Stĺpce s nízkou kardinalitou: Index na stĺpci s malým počtom jedinečných hodnôt (napríklad boolean pole TRUE/FALSE) nemusí priniesť významné zrýchlenie.
  • Časté operácie zápisu (INSERT, UPDATE, DELETE): Indexy vyžadujú aktualizáciu pri zmene údajov, čo môže spomaliť operácie zápisu. Nie je vhodné indexovať všetky stĺpce bez rozmyslu.
  • Stĺpce v podmienkach WHERE s funkciami: Ak sa funkcia aplikuje na stĺpec v WHERE (napríklad WHERE YEAR(date_column) = 2023), bežný index na date_column sa nevyužije. Bude potrebný funkčný index (ak ho podporuje DBMS) alebo prepis dotazu.

Výber stĺpcov na indexovanie a typ indexu (B-tree, hash, full-text atď.) závisí od špecifík údajov, charakteristík dotazov a používaného DBMS.