Sobes.tech
Junior

Co je indexování v kontextu databází nebo kolekcí?

sobes.tech AI

Odpověď od AI

Indexování je technika optimalizace výkonu při získávání dat.

V databázích je index struktura (například B-strom), která umožňuje rychle najít řádky v tabulce, aniž by bylo nutné prohledávat celou tabulku. Vytváří se na jednom nebo více sloupcích.

V kolekcích (například ArrayList v Javě) je indexování v podstatě vestavěné. Elementy jsou uloženy v seřazené posloupnosti a přístup k libovolnému elementu podle indexu (jeho pořadového čísla) je O(1).

Hlavní cíle indexování:

  • Zrychlení vykonávání dotazů: Zejména operací SELECT s podmínkami WHERE a JOIN.
  • Zajištění unikátnosti: Unikátní indexy garantují, že hodnoty ve sloupci nebo kombinaci sloupců budou jedinečné.
  • Podpora třídění: Indexy mohou být použity pro rychlé třídění výsledků (ORDER BY).

Příklady použití v SQL:

-- Vytvoření indexu na sloupci price
CREATE INDEX idx_products_price ON products (price);

-- Vytvoření složeného indexu na sloupcích customer_id a order_date
CREATE INDEX idx_orders_customer_date ON orders (customer_id, order_date);

V kolekcích, přístup přes index:

// Získání prvku podle indexu
List<String> names = new ArrayList<>();
names.add("Alice");
names.add("Bob");
String firstElement = names.get(0); // Přístup přes index 0

Nevýhody indexování:

  • Zabírá další diskový prostor.
  • Operace změny dat (INSERT, UPDATE, DELETE) jsou pomalejší, protože je třeba aktualizovat i index.
  • Není vždy využíván optimalizátorem dotazů (například při úplném skenování tabulky).