Uporaba ukaza EXPLAIN v MySQL
완료 조건
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.
마지막 수정됨: 화요일, 14 1월 2025, 7:51 PM