Twoje Centrum Szkoleniowe

Nauczmy się dziś czegoś nowego!

Kurs programowania - SQL

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ści NULL.
  • 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:

  1. Małe tabele – dla małych tabel indeksy mogą nie przynieść dużych korzyści, ponieważ pełne przeszukanie tabeli jest wystarczająco szybkie.
  2. 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.
  3. 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ę
Aby widzieć ocenę lekcji - Zaloguj się