Uporaba ukaza EXPLAIN v MySQL
Zahteve zaključka
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
id
: Identifikator vsakega dela poizvedbe. V tem primeru je poizvedba enostavna (SIMPLE).select_type
: Vrsta poizvedbe. Tukaj je SIMPLE, ker ni podpoizvedb.table
: Ime tabele, ki se trenutno obdela.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
).
possible_keys
: Indeksi, ki bi jih MySQL lahko uporabil.key
: Dejanski indeks, ki se uporablja.key_len
: Dolžina ključa (indeksa), ki se uporablja.ref
: Stolpec ali konstanta, ki se uporablja za iskanje prek indeksa.rows
: Približno število vrstic, ki jih MySQL pričakuje pregledati.filtered
: Odstotek vrstic, ki ustrezajo pogojuWHERE
.Extra
: Dodatne informacije, npr.Using where
(uporaba pogojaWHERE
) aliUsing index
(iskanje v indeksu).
Optimizacija na podlagi EXPLAIN
Če opazite, da MySQL uporablja ALL
za pregledovanje vseh vrstic tabele, lahko razmislite o:
- Dodajanju ustreznih indeksov.
CREATE INDEX idx_Cena ON Izdelki(Cena);
- 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