Condivisione della tecnologia

Mysql spiega la spiegazione dettagliata dell'istruzione e la visualizzazione di esempio

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Per prima cosa, introduciamo brevemente sql:

Il linguaggio SQL è diviso in quattro categorie: linguaggio di query dei dati DQL, linguaggio di manipolazione dei dati DML, linguaggio di definizione dei dati DDL e linguaggio di controllo dei dati DCL.

1. Linguaggio di interrogazione dati DQL
La struttura di base del linguaggio di query dei dati DQL è un blocco di query composto da clausole SELECT, clausola FROM e clausola WHERE: SELECT <nome campo tabella> FROM <nome tabella o vista> WHERE <condizioni query>

2. Linguaggio di manipolazione dei dati DML
Esistono tre forme principali di linguaggio di manipolazione dei dati DML:
1) Inserire: INSERIRE
2) Aggiornamento: AGGIORNAMENTO
3) Elimina: ELIMINA

3. DDL del linguaggio di definizione dei dati
Il linguaggio di definizione dei dati DDL viene utilizzato per creare vari oggetti nel database ----- tabelle, viste, indici, sinonimi, cluster, ecc., come: CREATE TABLE / VIEW / INDEX / SYN / CLUSTER Cluster di sinonimi di indice di vista tabella . Le operazioni DDL vengono inviate implicitamente! Impossibile eseguire il rollback

4. Linguaggio di controllo dati DCL
Il linguaggio di controllo dati DCL viene utilizzato per concedere o revocare determinati privilegi per accedere al database, controllare il tempo e l'effetto delle transazioni di manipolazione del database e monitorare il database. Piace:
1) CONCESSIONE: Autorizzazione.
2) ROLLBACK [WORK] TO [SAVEPOINT]: torna indietro fino a un certo punto. Rollback---ROLLBACK Il comando rollback riporta lo stato del database all'ultimo stato inviato. Il suo formato è: SQL>ROLLBACK;
3) COMMIT [LAVORO]: Invia. Durante le operazioni di inserimento, cancellazione e modifica del database, la transazione viene completata solo quando viene inviata al database. Prima che la transazione venga confermata, solo la persona che gestisce il database ha il diritto di vedere cosa è stato fatto. Gli altri possono vederlo solo dopo il completamento del commit finale.

Informazioni sulle dichiarazioni di autorizzazione

Comando di autorizzazione del database:

GRANT<permission> sul nome della tabella (o del nome della colonna) all'utente

Opzione di risposta corretta B: inserisci, seleziona: nome tabella autorizzazioni: utente utente: nkw

Autorizzazioni aggiuntive per il riciclaggio dei punti conoscenza

REVOKE <permesso> sul nome della tabella (o del nome della colonna) DALL'utente

Spiegare l'introduzione della dichiarazione

Credo che tutti abbiano familiarità con la dichiarazione di spiegazione, che viene utilizzata come dichiarazione per visualizzare il piano di esecuzione. spiegare viene spesso utilizzato nell'analisi di ottimizzazione SQL.

Vale la pena notare qui: spiegare non esegue effettivamente l'istruzione, ma visualizza solo il piano di esecuzione.

Quali informazioni posso vedere?

  • Ordine di lettura della tabella
  • Tipo di operazione di lettura dei dati
  • Quali indici possono essere utilizzati
  • Quali indici vengono effettivamente utilizzati
  • Riferimenti tra tabelle
  • Quante righe in ciascuna tabella vengono interrogate dall'ottimizzatore

Introduzione alla sintassi di base

  1. EXPLAIN SELECT select具体语句
  2. 如:
  3. EXPLAIN SELECT * FROM userpro

spiegare la funzione di ciascuna colonna

ElencodescrivereRifornire
idOgni parola chiave SELECT corrisponde a un ID

seleziona_tipo

Tipo di query corrispondente alla parola chiave SELECT
tavoloNome della tabella
partizioniInformazioni sulla partizione corrispondenti
tipoMetodo di accesso per singola tabella
possibili_chiaviPossibili indici
chiaveindice effettivo utilizzato
lunghezza_chiaveLa lunghezza effettiva dell'indice utilizzata
riferimentoQuando si utilizza la query di equivalenza della colonna dell'indice, le informazioni sull'oggetto che corrispondono alla colonna dell'indice per l'equivalenza.
righeNumero stimato di record da leggere
filtratoPercentuale di record rimanenti dopo il filtraggio in base ai criteri di ricerca

    

Extra

ulteriori informazioni

               

Introduzione dettagliata a ciascuna colonna di EXPLAIN

1, id

Ogni parola chiave SELECT corrisponde a un ID

Maggiore è il valore id, maggiore sarà la priorità e verrà eseguito per primo.

Se gli ID sono uguali, possono essere considerati come un gruppo ed eseguiti in sequenza dall'alto verso il basso.

Ciascun numero ID rappresenta una query indipendente Minore è il numero di query in un'istruzione SQL, meglio è.

2, seleziona_tipo

categoriaillustrare
SEMPLICEQuery a tabella singola, nessuna sottoquery o query UNION.
PRIMARIOL'istruzione SELECT più esterna nella query.
SOTTOQUERYNella clausola WHERE viene utilizzata una sottoquery.
DERIVATOPer le sottoquery contenute nella clausola FROM, MySQL la contrassegnerà come DERIVED (derivata) e genererà una tabella temporanea per il suo set di risultati da utilizzare con la query esterna.
UNIONELa seconda e le successive istruzioni di query in una query UNION.
RISULTATO DELL'UNIONEIl set di risultati di una query UNION.
SOTTOQUERY DIPENDENTEIl risultato della sottoquery dipende dal valore della query esterna e la sottoquery viene eseguita una volta per ogni riga della query esterna.
UNIONE DIPENDENTELa seconda e le successive istruzioni di una query UNION e i risultati dipendono dal valore della query esterna
SOTTOQUERY NON MESSAGGIABILE NELLA CACHELa sottoquery non può essere memorizzata nella cache e verrà eseguita ogni volta che viene fatto riferimento.

3. La colonna della tabella rappresenta il nome della tabella (a volte non il nome reale della tabella, potrebbe essere l'abbreviazione).

4. partizioni (opzionale)

5. tipo ☆

I tipi comuni sono i seguenti

tipoillustrare
sistemaDi solito c'è solo una riga nella tabella SELECT ... FROM DUAL Ottimizzazione delle query.
costanteLa query viene trovata una volta nell'indice, con una sola riga di risultati (tabella costante).
riferimento_eqUtilizza un indice univoco o una chiave primaria per trovare una riga da un'altra tabella.
riferimentoUtilizza un indice non univoco per trovare una o più righe da un'altra tabella.
allineareRestituisce un intervallo di righe utilizzando un indice.
indiceEsegue la scansione completa dell'indice per trovare le righe invece di scansionare l'intera tabella.
TuttoUna scansione completa della tabella controlla ogni riga della tabella.

In generale, cerca di evitare tutto

6, chiave e possibili_chiavi

  1. chiave

    • key Il campo mostra l'indice effettivo utilizzato dalla query.Se il valore di questo campo èNULL , indicando che non viene utilizzato alcun indice. Se questo campo ha un valore, significa che MySQL ha utilizzato l'indice specificato per eseguire la query.
  2. possibili_chiavi

    • possible_keys Il campo visualizza l'elenco degli indici che MySQL può utilizzare. Questi indici sono indici che possono essere considerati nelle query, ma potrebbero non essere effettivamente utilizzati. Generalmente,possible_keys Gli indici elencati in sono determinati in base alle condizioni della query e alla struttura della tabella.
  • Se key Un campo ha un nome di indice epossible_keys Più nomi di indici sono elencati in , a indicare che MySQL ha selezionatokey Per eseguire la query viene utilizzato l'indice su cui è elencato il campo, mentre gli altri indici sono elencatipossible_keys Medium ha affermato che potrebbe anche essere preso in considerazione, ma alla fine non utilizzato.

  • Se key I campi sonoNULL,E possible_keys Più nomi di indici sono elencati in , a indicare che MySQL non utilizza alcun indice durante l'esecuzione della query, il che potrebbe comportare una scansione completa della tabella o altri metodi di accesso non ottimizzati per l'indice.

7, lunghezza_chiave

key_len È un campo che descrive la lunghezza della chiave dell'indice. Indica l'utilizzo dell'indice e la lunghezza della chiave dell'indice quando MySQL utilizza un indice specifico per eseguire query.

  1. Indice di colonna singola

    • Se viene utilizzato un indice di colonna singola e il tipo di colonna è a lunghezza fissa (ad es. INT),Ma key_len Il valore è la lunghezza della colonna.
    • Se vengono utilizzati campi di lunghezza variabile (es. VARCHAR),Ma key_len Il valore di è la lunghezza massima del campo.
  2. indice composito

    • Per gli indici compositi (ovvero indici contenenti più colonne),key_len Rappresenta la lunghezza totale di tutte le colonne nell'indice.
  3. indice combinato

    • Se nella query viene utilizzato un indice combinato su più colonne,key_len è la lunghezza totale di tutte le colonne nell'indice combinato.
  4. prefisso dell'indice

    • In alcuni casi, MySQL può utilizzare solo una parte dell'indice. Ad esempio, puoi utilizzare il prefisso dell'indice come parte dell'indice per eseguire una query. in questo caso,key_len Verrà mostrata la lunghezza effettiva della parte indice utilizzata.

8, rif.

ref È un campo che descrive le condizioni di connessione tra tabelle o utilizza un indice non univoco per la ricerca. Indica quali condizioni di join o quali indici utilizza MySQL per accedere alla tabella durante l'esecuzione di una query.

9, righe

rows È una stima del numero di righe a cui si accede o esaminate durante l'esecuzione di una query.

  • per semplice SELECT Chiedere informazioni,rows Rappresenta il numero stimato di righe da restituire.
  • Per le query di unione (JOIN) o sottoquery,rows Può rappresentare il numero di righe a cui si accede durante l'operazione di unione.
  • Per la scansione della tabella (scansione completa della tabella o scansione dell'indice),rows Può rappresentare il numero di righe scansionate.

10, filtrato

Rappresenta la percentuale di righe filtrate in base alle condizioni WHERE e alle condizioni dell'indice. filtrato riflette l'effetto di ottimizzazione della query stimato dall'ottimizzatore.

Quando filtered Quando è vicino al 100%, significa che le condizioni della query hanno effettivamente filtrato la maggior parte delle righe che non soddisfano le condizioni, il che in genere è un buon indicatore di ottimizzazione.

Al contrario, se filtered Un valore basso potrebbe indicare che le condizioni della query non sono sufficientemente precise o che l'ottimizzatore non utilizza efficacemente l'indice per filtrare i dati.

11, In più

Campi informativi aggiuntivi

Eccone alcuni comuni Extra Campi e loro significato:

  1. Utilizzo dell'indice

    • Indica che la query utilizza un indice di copertura, ovvero i risultati della query possono essere restituiti completamente tramite l'indice senza accedere alle righe di dati effettive della tabella.
  2. Utilizzando dove

    • Indica che il server MySQL eseguirà il filtraggio condizionale dopo che il motore di archiviazione avrà recuperato le righe, anziché completarle nell'indice.
  3. Utilizzo temporaneo

    • Indica che MySQL ha creato una tabella temporanea in memoria per elaborare la query. Comunemente utilizzato nelle operazioni di ordinamento o nelle query contenenti funzioni aggregate.
  4. Utilizzo di FileSort

    • Indica che MySQL ha eseguito l'ordinamento dei file per elaborare la query. Questo di solito accade quando non è possibile eseguire l'ordinamento utilizzando un indice.
  5. Intervallo controllato per ogni record (mappa indice: ...)

    • Indica che MySQL utilizza l'indice per verificare se ciascun record rientra nell'intervallo specificato.Questo di solito accade quandorange Nel tipo di query.
  6. Scansione completa sulla chiave NULL

    • Indica che MySQL ha eseguito una scansione completa della tabella in un indice per trovare righe corrispondenti a valori NULL.
  7. Distinto

    • Indica che MySQL smetterà di cercare righe duplicate dopo aver trovato la prima riga corrispondente.
  8. Utilizzo del buffer di join (blocco ciclo annidato)

    • Indica che MySQL sta utilizzando il buffer di connessione per gestire l'operazione di connessione. Di solito si verifica quando il numero di tabelle di connessione è elevato o la dimensione della tabella di connessione è elevata.
  9. Impossibile DOVE

    • Indica che l'ottimizzatore MySQL ha determinato che le condizioni nella clausola WHERE non possono essere soddisfatte e pertanto nessuna riga verrà scansionata.
  10. Nessuna tabella utilizzata

    • Indica, ad esempio, che la query non coinvolge alcuna tabella SELECT NOW()

spiegare la visualizzazione dell'esecuzione effettiva

preparazione dei dati

Crea la tabella s1

  1. CREATE TABLE s1 (
  2. id INT AUTO_INCREMENT,
  3. key1 VARCHAR(100),
  4. key2 INT,
  5. key3 VARCHAR(100),
  6. key_part1 VARCHAR(100),
  7. key_part2 VARCHAR(100),
  8. key_part3 VARCHAR(100),
  9. common_field VARCHAR(100),
  10. PRIMARY KEY (id),
  11. INDEX idx_key1 (key1),
  12. UNIQUE INDEX idx_key2 (key2),
  13. INDEX idx_key3 (key3),
  14. INDEX idx_key_part(key_part1, key_part2, key_part3)
  15. ) ENGINE=INNODB CHARSET=utf8;

Crea la tabella s2

  1. CREATE TABLE s2 (
  2. id INT AUTO_INCREMENT,
  3. key1 VARCHAR(100),
  4. key2 INT,
  5. key3 VARCHAR(100),
  6. key_part1 VARCHAR(100),
  7. key_part2 VARCHAR(100),
  8. key_part3 VARCHAR(100),
  9. common_field VARCHAR(100),
  10. PRIMARY KEY (id),
  11. INDEX idx_key1 (key1),
  12. UNIQUE INDEX idx_key2 (key2),
  13. INDEX idx_key3 (key3),
  14. INDEX idx_key_part(key_part1, key_part2, key_part3)
  15. ) ENGINE=INNODB CHARSET=utf8;

I dati sono preparati da te.

Esecuzione e risultati del campione

Domanda semplice

Interrogazione su tabella singola

EXPLAIN SELECT * FROM `s1`;

Partecipa alla query

EXPLAIN SELECT * FROM `s1` INNER JOIN `s2`;

sottoquery

  1. EXPLAIN SELECT * FROM s1 WHERE key1 IN (SELECT key2 FROM s2 WHERE common_field
  2. = 'a');

esposizione speciale

mostra select_type
  1. #Union 去重
  2. EXPLAIN SELECT * FROM `s1` UNION SELECT * FROM `s2`;
  3. #Union 全查
  4. EXPLAIN SELECT * FROM `s1` UNION ALL SELECT * FROM `s2`;

L'ultimo passaggio è la deduplicazione, quindi verrà utilizzata una tabella temporanea. Tuttavia, UNION ALL è una query per tutti e non verrà visualizzato alcun messaggio di query di tabella temporanea.

classe di tipo

const (trova l'indice una volta, solo una riga di risultati)

EXPLAIN SELECT * FROM s1 WHERE id = 10002;

eq_ref (trova una riga da un'altra tabella utilizzando un indice univoco o una chiave primaria)

EXPLAIN SELECT * FROM s1 INNER JOIN s2 ON s1.id = s2.id;

ref (utilizza un indice non univoco per trovare una o più righe da un'altra tabella)

EXPLAIN SELECT * FROM s1 WHERE key1 = 'a';

intervallo (restituisce un intervallo di righe utilizzando l'indice)

EXPLAIN SELECT * FROM s1 WHERE key1 IN ('a', 'b', 'c');

indice (scansiona completamente l'indice per trovare le righe)

EXPLAIN SELECT key_part2 FROM s1 WHERE key_part3 = 'a';

Altri display

ora decimale filtrata

EXPLAIN SELECT * FROM s1 WHERE key1 > 'za' AND common_field = 'la'