Indeksy (INDEX) – rola i optymalizacja zapytań
Indeksy w bazach danych są ważnym narzędziem, które pozwala na szybsze wyszukiwanie danych. Bez indeksów baza danych musi przeszukać każdy wiersz, aby znaleźć odpowiednie wyniki, co może zajmować dużo czasu, szczególnie w dużych tabelach. W tej sekcji dowiesz się, jak działają indeksy, dlaczego są ważne i jak mogą pomóc w optymalizacji zapytań.
Co to jest indeks?
Indeks to specjalna struktura w bazie danych, która działa jak spis treści w książce. Dzięki niemu można szybko znaleźć potrzebne dane, bez konieczności przeszukiwania całej tabeli. Indeksy są tworzone na kolumnach tabel, aby przyspieszyć operacje takie jak SELECT
, WHERE
, ORDER BY
czy JOIN
.
Przykład: Tworzenie indeksu na kolumnie nazwa
w tabeli Produkty
:
CREATE INDEX idx_nazwa ON Produkty(nazwa);
W powyższym przykładzie utworzono indeks idx_nazwa
, który przyspiesza wyszukiwanie produktów na podstawie ich nazwy.
Rodzaje indeksów
W bazach danych istnieje kilka rodzajów indeksów, które można stosować w zależności od potrzeb:
- Indeksy podstawowe (Primary Index) – automatycznie tworzone dla kolumn będących kluczami głównymi (
PRIMARY KEY
). Są one unikalne i nie mogą zawierać wartościNULL
. - Indeksy unikalne (Unique Index) – zapewniają, że wartości w danej kolumnie są unikalne. Są przydatne, gdy chcemy mieć pewność, że np. adres e-mail użytkownika nie powtórzy się.
Przykład: Tworzenie unikalnego indeksu na kolumnie email
:
CREATE UNIQUE INDEX idx_email ON Uzytkownicy(email);
- Indeksy zwykłe (Non-Unique Index) – służą do przyspieszenia wyszukiwania, ale nie wymuszają unikalności wartości.
- Indeksy pełnotekstowe (Fulltext Index) – używane do przeszukiwania dużych fragmentów tekstu, takich jak artykuły lub opisy produktów.
- Indeksy złożone (Composite Index) – tworzone na kilku kolumnach jednocześnie, aby przyspieszyć wyszukiwanie na podstawie wielu kryteriów.
Przykład: Tworzenie indeksu złożonego na kolumnach imie
i nazwisko
:
CREATE INDEX idx_imie_nazwisko ON Uzytkownicy(imie, nazwisko);
Rola indeksów w optymalizacji zapytań
Indeksy odgrywają kluczową rolę w przyspieszaniu zapytań do bazy danych. Dzięki nim zapytania korzystające z kolumn zindeksowanych mogą działać znacznie szybciej, ponieważ baza danych nie musi przeszukiwać każdego wiersza – zamiast tego używa indeksu, aby szybko odnaleźć właściwe dane. To znacząco skraca czas odpowiedzi, zwłaszcza w przypadku dużych tabel.
Jak indeksy przyspieszają zapytania?
Kiedy używamy zapytania z klauzulą WHERE
lub ORDER BY
, baza danych sprawdza, czy na kolumnach używanych w tych klauzulach istnieje indeks. Jeśli tak, baza danych używa indeksu do szybszego odnalezienia odpowiednich wierszy.
Przykład: Wyszukiwanie produktu po nazwie:
SELECT * FROM Produkty WHERE nazwa = 'Telefon';
Jeśli kolumna nazwa
jest zindeksowana, baza danych może szybko znaleźć produkt o nazwie 'Telefon', bez konieczności przeszukiwania każdego wiersza tabeli.
Kiedy nie używać indeksów?
Chociaż indeksy są bardzo przydatne, nie zawsze warto je stosować. Każdy indeks zajmuje dodatkowe miejsce w pamięci i wpływa na wydajność operacji takich jak INSERT
, UPDATE
i DELETE
, ponieważ zmiany w tabeli muszą być również odzwierciedlone w indeksie. Oto kilka sytuacji, w których nie warto stosować zbyt wielu indeksów:
- Małe tabele – dla małych tabel indeksy mogą nie przynieść dużych korzyści, ponieważ pełne przeszukanie tabeli jest wystarczająco szybkie.
- Częste operacje modyfikacji – jeśli tabela jest często aktualizowana, wstawiane są nowe dane lub dane są usuwane, wiele indeksów może spowolnić te operacje.
- Kolumny o niewielkiej różnorodności danych – indeksowanie kolumn z małą liczbą unikalnych wartości (np.
płeć
w tabeli użytkowników) zwykle nie przynosi korzyści, ponieważ baza danych nadal musi przeszukiwać dużą część tabeli.
Zarządzanie indeksami
Zarządzanie indeksami polega na tworzeniu, usuwaniu i analizowaniu indeksów, aby zapewnić najlepszą możliwą wydajność bazy danych. Możemy usuwać indeksy, które są zbędne lub które negatywnie wpływają na wydajność.
Przykład: Usunięcie indeksu idx_nazwa
z tabeli Produkty
:
DROP INDEX idx_nazwa ON Produkty;
Regularna analiza indeksów za pomocą narzędzi takich jak EXPLAIN
w MySQL pozwala zrozumieć, które indeksy są używane, a które nie są przydatne.
Przykład: Użycie EXPLAIN
do analizy zapytania:
EXPLAIN SELECT * FROM Produkty WHERE nazwa = 'Telefon';
To polecenie pokaże, jakie indeksy są używane podczas wykonywania zapytania i jak efektywnie przeszukiwane są dane.
Testy przypięte do lekcji | |
---|---|
Aby uzyskać dostęp do testów i ćwiczeń interaktywnych - Zaloguj się |