Sobes.tech
Junior

Czym jest indeksowanie w kontekście baz danych lub kolekcji?

sobes.tech AI

Odpowiedź od AI

Indeksowanie to technika optymalizacji wydajności podczas pobierania danych.

W bazach danych indeks to struktura (np. drzewo B), która pozwala szybko znaleźć wiersze w tabeli bez przeszukiwania całej tabeli. Tworzy się go na jednej lub kilku kolumnach.

W kolekcjach (np. ArrayList w Javie) indeksowanie jest w zasadzie wbudowane. Elementy są przechowywane w uporządkowanej sekwencji, a dostęp do dowolnego elementu po indeksie (numerze porządkowym) odbywa się w czasie O(1).

Główne cele indeksowania:

  • Przyspieszenie wykonywania zapytań: Szczególnie operacji SELECT z warunkami WHERE i JOIN.
  • Zapewnienie unikalności: Unikalne indeksy gwarantują, że wartości w indeksowanej kolumnie lub kombinacji kolumn będą unikalne.
  • Wsparcie sortowania: Indeksy mogą być używane do szybkiego sortowania wyników (ORDER BY).

Przykłady użycia w SQL:

-- Tworzenie indeksu na kolumnie price
CREATE INDEX idx_products_price ON products (price);

-- Tworzenie indeksu złożonego na kolumnach customer_id i order_date
CREATE INDEX idx_orders_customer_date ON orders (customer_id, order_date);

W kolekcjach dostęp po indeksie:

// Uzyskanie elementu po indeksie
List<String> names = new ArrayList<>();
names.add("Alice");
names.add("Bob");
String firstElement = names.get(0); // Dostęp po indeksie 0

Wady indeksowania:

  • Zajmuje dodatkową przestrzeń dyskową.
  • Operacje modyfikacji danych (INSERT, UPDATE, DELETE) stają się wolniejsze, ponieważ trzeba zaktualizować również indeks.
  • Nie zawsze są wykorzystywane przez optymalizator zapytań (np. podczas pełnego skanowania tabeli).