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
SELECTz warunkamiWHEREiJOIN. - 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).