V MySQL se ukaz EXPLAIN uporablja za analizo in optimizacijo poizvedb. Pokaže, kako MySQL načrtuje izvedbo poizvedbe, vključno z uporabo indeksov, vrstami dostopa do tabel in vrstnim redom izvajanja.

Primer funkcije EXPLAIN

Nastavitev podatkovne baze

Predpostavimo, da imamo dve tabeli:

CREATE TABLE Izdelki (
    ID INT PRIMARY KEY AUTO_INCREMENT,
    Ime VARCHAR(50),
    Cena DECIMAL(10, 2),
    Zaloga INT
);

CREATE TABLE Naročila (
    ID INT PRIMARY KEY AUTO_INCREMENT,
    IzdelekID INT,
    Količina INT,
    Datum DATE,
    FOREIGN KEY (IzdelekID) REFERENCES Izdelki(ID)
);

-- Vstavimo nekaj podatkov
INSERT INTO Izdelki (Ime, Cena, Zaloga) 
VALUES ('Izdelek A', 10.00, 100), ('Izdelek B', 15.00, 50);

INSERT INTO Naročila (IzdelekID, Količina, Datum) 
VALUES (1, 2, '2025-01-01'), (2, 1, '2025-01-02');

Poizvedba za analizo

SELECT Naročila.ID, Izdelki.Ime, Naročila.Količina, Naročila.Datum
FROM Naročila
JOIN Izdelki ON Naročila.IzdelekID = Izdelki.ID
WHERE Izdelki.Cena > 12;

Uporaba EXPLAIN

Za analizo načrta izvajanja zgornje poizvedbe uporabimo ukaz EXPLAIN:

EXPLAIN 
SELECT Naročila.ID, Izdelki.Ime, Naročila.Količina, Naročila.Datum
FROM Naročila
JOIN Izdelki ON Naročila.IzdelekID = Izdelki.ID
WHERE Izdelki.Cena > 12;

Rezultat

Rezultat ukaza EXPLAIN bi bil nekaj podobnega temu (odvisno od vaše podatkovne baze in indeksov):

id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE Izdelki range PRIMARY PRIMARY 4 NULL 1 50.00 Using where
1 SIMPLE Naročila ref IzdelekID IzdelekID 4 Izdelki.ID 2 100.00 NULL

Pojasnilo rezultatov

  1. id: Identifikator vsakega dela poizvedbe. V tem primeru je poizvedba enostavna (SIMPLE).
  2. select_type: Vrsta poizvedbe. Tukaj je SIMPLE, ker ni podpoizvedb.
  3. table: Ime tabele, ki se trenutno obdela.
  4. type: Vrsta dostopa do tabele (npr. ALL, index, range, ref, const). Manjše vrednosti so boljše za učinkovitost.
    • range: Omejeno iskanje z uporabo pogojev (npr. Cena > 12).
    • ref: Uporaba tujih ključev (npr. Naročila.IzdelekID = Izdelki.ID).
  5. possible_keys: Indeksi, ki bi jih MySQL lahko uporabil.
  6. key: Dejanski indeks, ki se uporablja.
  7. key_len: Dolžina ključa (indeksa), ki se uporablja.
  8. ref: Stolpec ali konstanta, ki se uporablja za iskanje prek indeksa.
  9. rows: Približno število vrstic, ki jih MySQL pričakuje pregledati.
  10. filtered: Odstotek vrstic, ki ustrezajo pogoju WHERE.
  11. Extra: Dodatne informacije, npr. Using where (uporaba pogoja WHERE) ali Using index (iskanje v indeksu).

Optimizacija na podlagi EXPLAIN

Če opazite, da MySQL uporablja ALL za pregledovanje vseh vrstic tabele, lahko razmislite o:

  1. Dodajanju ustreznih indeksov.
    CREATE INDEX idx_Cena ON Izdelki(Cena);
    
  2. Preoblikovanju poizvedb za boljšo selektivnost.

Z uporabo EXPLAIN lahko prepoznate težave z zmogljivostjo in optimizirate svoje poizvedbe za boljšo učinkovitost.

Zadnja sprememba: torek, 14. januar 2025, 19.51