Indeksy w MySQL

1. Czym są indeksy w MySQL?

Indeksy w MySQL to specjalne struktury danych, które poprawiają wydajność operacji wyszukiwania w tabelach. Działają podobnie do indeksów w książkach – pozwalają na szybkie odnalezienie danych bez konieczności przeszukiwania całej tabeli.

Zalety indeksów:

  • Przyspieszają operacje SELECT poprzez szybsze wyszukiwanie danych
  • Zwiększają wydajność operacji JOIN w zapytaniach
  • Optymalizują filtrowanie danych w WHERE, ORDER BY i GROUP BY

Wady indeksów:

  • Zajmują dodatkową przestrzeń w bazie danych
  • Mogą spowolnić operacje INSERT, UPDATE i DELETE, ponieważ MySQL musi aktualizować indeksy przy każdej zmianie danych

2. Rodzaje indeksów w MySQL

Indeks PRIMARY KEY (klucz główny)

Każda tabela może mieć tylko jeden klucz główny (PRIMARY KEY). Domyślnie jest to indeks unikalny.

CREATE TABLE klienci (
    id INT AUTO_INCREMENT PRIMARY KEY,
    imie VARCHAR(50),
    nazwisko VARCHAR(50),
    email VARCHAR(100)
);

Indeks UNIQUE (indeks unikalny)

Zapewnia, że wartości w kolumnie są unikalne.

CREATE TABLE produkty (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nazwa VARCHAR(100),
    kod_produktu VARCHAR(50) UNIQUE
);

Indeks STANDARDOWY (INDEX)

Przyspiesza wyszukiwanie, ale nie wymusza unikalności.

CREATE INDEX idx_nazwisko ON klienci(nazwisko);

Indeks WIELOKOLUMNOWY (Composite Index)

Indeks na więcej niż jednej kolumnie – MySQL może go używać do optymalizacji zapytań.

CREATE INDEX idx_nazwisko_imie ON klienci(nazwisko, imie);

Indeks FULLTEXT (dla wyszukiwania tekstowego)

Służy do szybkiego wyszukiwania w dużych zbiorach tekstu.

CREATE TABLE artykuly (
    id INT AUTO_INCREMENT PRIMARY KEY,
    tytul VARCHAR(255),
    tresc TEXT,
    FULLTEXT (tytul, tresc)
);

3. Przykłady użycia indeksów

Tworzenie indeksu po utworzeniu tabeli

Jeśli tabela już istnieje, można dodać indeks:

CREATE INDEX idx_email ON klienci(email);

Usuwanie indeksu

DROP INDEX idx_email ON klienci;

Sprawdzanie indeksów w tabeli

SHOW INDEX FROM klienci;

4. Ćwiczenia dla uczniów

Ćwiczenie 1: Tworzenie indeksu PRIMARY KEY

Stwórz tabelę pracownicy, w której klucz główny będzie oparty na kolumnie id.


Ćwiczenie 2: Tworzenie indeksu UNIQUE

Dodaj indeks unikalny do tabeli pracownicy, tak aby numer telefonu (telefon) nie mógł się powtarzać.


Ćwiczenie 3: Tworzenie indeksu dla wyszukiwania

Stwórz indeks na kolumnie nazwisko w tabeli pracownicy, aby przyspieszyć wyszukiwanie według nazwiska.


Ćwiczenie 4: Tworzenie indeksu FULLTEXT

Utwórz tabelę posty z kolumnami tytul i tresc, a następnie dodaj indeks FULLTEXT do tych kolumn.


Po tej lekcji uczniowie powinni umieć:

  • Tworzyć różne rodzaje indeksów
  • Optymalizować wyszukiwanie w MySQL
  • Wykorzystywać indeksy w praktycznych scenariuszach