le mie informazioni di contatto
Posta[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
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.
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
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?
- EXPLAIN SELECT select具体语句
- 如:
- EXPLAIN SELECT * FROM userpro
Elenco | descrivere | Rifornire |
id | Ogni parola chiave SELECT corrisponde a un ID | |
seleziona_tipo | Tipo di query corrispondente alla parola chiave SELECT | |
tavolo | Nome della tabella | |
partizioni | Informazioni sulla partizione corrispondenti | |
tipo | Metodo di accesso per singola tabella | |
possibili_chiavi | Possibili indici | |
chiave | indice effettivo utilizzato | |
lunghezza_chiave | La lunghezza effettiva dell'indice utilizzata | |
riferimento | Quando si utilizza la query di equivalenza della colonna dell'indice, le informazioni sull'oggetto che corrispondono alla colonna dell'indice per l'equivalenza. | |
righe | Numero stimato di record da leggere | |
filtrato | Percentuale di record rimanenti dopo il filtraggio in base ai criteri di ricerca |
|
Extra | ulteriori informazioni |
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
categoria | illustrare |
SEMPLICE | Query a tabella singola, nessuna sottoquery o query UNION. |
PRIMARIO | L'istruzione SELECT più esterna nella query. |
SOTTOQUERY | Nella clausola WHERE viene utilizzata una sottoquery. |
DERIVATO | Per 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. |
UNIONE | La seconda e le successive istruzioni di query in una query UNION. |
RISULTATO DELL'UNIONE | Il set di risultati di una query UNION. |
SOTTOQUERY DIPENDENTE | Il risultato della sottoquery dipende dal valore della query esterna e la sottoquery viene eseguita una volta per ogni riga della query esterna. |
UNIONE DIPENDENTE | La seconda e le successive istruzioni di una query UNION e i risultati dipendono dal valore della query esterna |
SOTTOQUERY NON MESSAGGIABILE NELLA CACHE | La 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
tipo | illustrare |
sistema | Di solito c'è solo una riga nella tabella SELECT ... FROM DUAL Ottimizzazione delle query. |
costante | La query viene trovata una volta nell'indice, con una sola riga di risultati (tabella costante). |
riferimento_eq | Utilizza un indice univoco o una chiave primaria per trovare una riga da un'altra tabella. |
riferimento | Utilizza un indice non univoco per trovare una o più righe da un'altra tabella. |
allineare | Restituisce un intervallo di righe utilizzando un indice. |
indice | Esegue la scansione completa dell'indice per trovare le righe invece di scansionare l'intera tabella. |
Tutto | Una scansione completa della tabella controlla ogni riga della tabella. |
In generale, cerca di evitare tutto
6, chiave e possibili_chiavi
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.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.
Indice di colonna singola:
INT
),Ma key_len
Il valore è la lunghezza della colonna.VARCHAR
),Ma key_len
Il valore di è la lunghezza massima del campo.indice composito:
key_len
Rappresenta la lunghezza totale di tutte le colonne nell'indice.indice combinato:
key_len
è la lunghezza totale di tutte le colonne nell'indice combinato.prefisso dell'indice:
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.
SELECT
Chiedere informazioni,rows
Rappresenta il numero stimato di righe da restituire.JOIN
) o sottoquery,rows
Può rappresentare il numero di righe a cui si accede durante l'operazione di unione.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:
Utilizzo dell'indice:
Utilizzando dove:
Utilizzo temporaneo:
Utilizzo di FileSort:
Intervallo controllato per ogni record (mappa indice: ...):
range
Nel tipo di query.Scansione completa sulla chiave NULL:
Distinto:
Utilizzo del buffer di join (blocco ciclo annidato):
Impossibile DOVE:
Nessuna tabella utilizzata:
SELECT NOW()
。- CREATE TABLE s1 (
- id INT AUTO_INCREMENT,
- key1 VARCHAR(100),
- key2 INT,
- key3 VARCHAR(100),
- key_part1 VARCHAR(100),
- key_part2 VARCHAR(100),
- key_part3 VARCHAR(100),
- common_field VARCHAR(100),
- PRIMARY KEY (id),
- INDEX idx_key1 (key1),
- UNIQUE INDEX idx_key2 (key2),
- INDEX idx_key3 (key3),
- INDEX idx_key_part(key_part1, key_part2, key_part3)
- ) ENGINE=INNODB CHARSET=utf8;
- CREATE TABLE s2 (
- id INT AUTO_INCREMENT,
- key1 VARCHAR(100),
- key2 INT,
- key3 VARCHAR(100),
- key_part1 VARCHAR(100),
- key_part2 VARCHAR(100),
- key_part3 VARCHAR(100),
- common_field VARCHAR(100),
- PRIMARY KEY (id),
- INDEX idx_key1 (key1),
- UNIQUE INDEX idx_key2 (key2),
- INDEX idx_key3 (key3),
- INDEX idx_key_part(key_part1, key_part2, key_part3)
- ) ENGINE=INNODB CHARSET=utf8;
I dati sono preparati da te.
Interrogazione su tabella singola
EXPLAIN SELECT * FROM `s1`;
Partecipa alla query
EXPLAIN SELECT * FROM `s1` INNER JOIN `s2`;
sottoquery
- EXPLAIN SELECT * FROM s1 WHERE key1 IN (SELECT key2 FROM s2 WHERE common_field
- = 'a');
- #Union 去重
- EXPLAIN SELECT * FROM `s1` UNION SELECT * FROM `s2`;
- #Union 全查
- 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.
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';
ora decimale filtrata
EXPLAIN SELECT * FROM s1 WHERE key1 > 'za' AND common_field = 'la'