2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
SQL-kieli on jaettu neljään luokkaan: tietojen kyselykieli DQL, tietojenkäsittelykieli DML, tiedonmäärityskieli DDL ja tiedonhallintakieli DCL.
1. Tietokyselykieli DQL
Tietokyselykielen DQL perusrakenne on kyselylohko, joka koostuu SELECT-, FROM- ja WHERE-lauseesta: SELECT <kentän nimitaulukko> FROM <taulukon tai näkymän nimi> WHERE <kyselyehdot>
2. Data Manipulation Language DML
Tietojenkäsittelykielellä DML on kolme päämuotoa:
1) Lisää: INSERT
2) Päivitys: PÄIVITYS
3) Poista: POISTA
3. Data Definition Language DDL
Tietojen määrittelykieltä DDL käytetään luomaan erilaisia objekteja tietokantaan ----- taulukoita, näkymiä, indeksejä, synonyymejä, klustereita jne., kuten: CREATE TABLE / VIEW / INDEX / SYN / CLUSTER | . DDL-operaatiot lähetetään implisiittisesti! Ei voi peruuttaa
4. Data Control Language DCL
Tietojen ohjauskieltä DCL käytetään tiettyjen tietokannan käyttöoikeuksien myöntämiseen tai peruuttamiseen, tietokannan käsittelytapahtumien ajan ja vaikutuksen hallintaan sekä tietokannan valvontaan. Kuten:
1) GRANT: valtuutus.
2) PALAUTUS [TYÖ] [SÄÄSTÖPISTEEN]: Palaa takaisin tiettyyn pisteeseen. Rollback---ROLLBACK Palautuskomento palauttaa tietokannan tilan viimeksi lähetettyyn tilaan. Sen muoto on: SQL>ROLLBACK;
3) SITOA [TYÖ]: Lähetä. Tietokannan lisäys-, poisto- ja muokkaustoimintojen aikana tapahtuma valmistuu vain, kun se lähetetään tietokantaan. Ennen kuin tapahtuma on sitoutunut, vain tietokantaa ylläpitävällä henkilöllä on oikeus nähdä, mitä on tehty. Muut voivat nähdä sen vasta viimeisen sitoumuksen jälkeen.
Tietokannan valtuutuskomento:
MYÖNTÄ<lupa> taulukon nimeen (tai sarakkeen nimeen) käyttäjälle
Oikea vastausvaihtoehto B: insert,select: lupataulukon nimi: user user: nkw
Lisätietopisteet-kierrätysluvat
REVOKE <käyttöoikeus> taulukon nimeen (tai sarakkeen nimeen) käyttäjältä
Uskon, että kaikki tuntevat selityksen, jota käytetään lauseena toteutussuunnitelman tarkastelussa. selitystä käytetään usein SQL-optimointianalyysissä.
Tässä kannattaa huomioida: selitys ei varsinaisesti suorita käskyä, vaan näyttää vain suoritussuunnitelman.
Mitä tietoja voin nähdä?
- EXPLAIN SELECT select具体语句
- 如:
- EXPLAIN SELECT * FROM userpro
Lista | kuvata | Täydentää |
id | Jokainen SELECT-avainsana vastaa id:tä | |
select_type | SELECT-avainsanaa vastaava kyselytyyppi | |
pöytä | Taulukon nimi | |
väliseinät | Osion tiedot vastaavat | |
tyyppi | Yhden pöydän käyttötapa | |
mahdolliset_avaimet | Mahdolliset indeksit | |
avain | todellinen käytetty indeksi | |
key_len | Todellinen käytetty indeksin pituus | |
viite | Kun käytetään indeksisarakkeen vastaavuuskyselyä, objektitiedot, jotka vastaavat indeksisaraketta, vastaavuus. | |
rivit | Arvioitu luettavien tietueiden määrä | |
suodatettu | Jäljellä olevien tietueiden prosenttiosuus hakuehtojen mukaan suodattamisen jälkeen |
|
ylimääräistä | Lisätieto |
1, id
Jokainen SELECT-avainsana vastaa id:tä
Mitä suurempi id-arvo on, sitä korkeampi prioriteetti on ja se suoritetaan ensin.
Jos tunnukset ovat samat, niitä voidaan pitää ryhmänä ja suorittaa peräkkäin ylhäältä alas.
Jokainen ID-numero edustaa itsenäistä kyselyä, mitä vähemmän kyselyitä on SQL-käskyssä.
2, valitse_tyyppi
kategoria | havainnollistaa |
YKSINKERTAINEN | Yhden taulukon kysely, ei alikyselyä tai UNION-kysely. |
ENSISIJAINEN | Kyselyn uloin SELECT-lause. |
ALAKYSELY | WHERE-lauseessa käytetään alikyselyä. |
JOHDETTU | FROM-lauseeseen sisältyville alikyselyille MySQL merkitsee sen DERIVED (johdettu) ja luo väliaikaisen taulukon tulosjoukolleen ulkoisen kyselyn käyttöä varten. |
LIITTO | Toinen ja sitä seuraavat kyselylausekkeet UNION-kyselyssä. |
UNIONIN TULOS | UNION-kyselyn tulosjoukko. |
RIIPPUVA ALAKYSYMYS | Alikyselyn tulos riippuu ulomman kyselyn arvosta, ja alikysely suoritetaan kerran jokaiselle ulkokyselyn riville. |
RIIPPULLINEN UNIONI | UNION-kyselyn toinen ja sitä seuraavat kyselylauseet ja tulokset riippuvat ulkoisen kyselyn arvosta |
MATKAA ALAKYSYMYS | Alikyselyä ei voi tallentaa välimuistiin, ja se suoritetaan aina, kun siihen viitataan. |
3. Taulukon sarake edustaa taulukon taulukon nimeä (joskus ei taulukon oikeaa nimeä, se voi olla lyhenne).
4. väliseinät (valinnainen)
5. kirjoita ☆
Yleiset tyypit ovat seuraavat
tyyppi | havainnollistaa |
järjestelmä | Taulukossa on yleensä vain yksi rivi SELECT ... FROM DUAL Kyselyn optimointi. |
konst | Kysely löytyy indeksin kautta kerran, vain yhdellä tulosrivillä (vakiotaulukko). |
eq_ref | Käytä yksilöllistä indeksiä tai ensisijaista avainta löytääksesi rivi toisesta taulukosta. |
viite | Käytä ei-yksilöllistä hakemistoa löytääksesi yhden tai useamman rivin toisesta taulukosta. |
alue | Palauta rivit indeksin avulla. |
indeksi | Tarkistaa indeksin kokonaan löytääkseen rivejä koko taulukon tarkistamisen sijaan. |
kaikki | Täysi taulukon tarkistus tarkistaa jokaisen taulukon rivin. |
Yleensä yritä välttää kaikkea
6, avain ja mahdolliset_avaimet
avain:
key
kenttä näyttää kyselyn käyttämän todellisen indeksin.Jos tämän kentän arvo onNULL
, joka osoittaa, että indeksiä ei käytetä. Jos tällä kentällä on arvo, se tarkoittaa, että MySQL käytti määritettyä indeksiä kyselyn suorittamiseen.mahdolliset_avaimet:
possible_keys
Kenttä näyttää luettelon indekseistä, joita MySQL voi käyttää. Nämä indeksit ovat indeksejä, jotka voidaan ottaa huomioon kyselyissä, mutta joita ei välttämättä käytetä. yleensä,possible_keys
Kohdassa luetellut indeksit määräytyvät kyselyehtojen ja taulukkorakenteen perusteella.jos key
Kentällä on indeksin nimi japossible_keys
Useita hakemistonimiä on lueteltu kohdassa , mikä osoittaa, että MySQL on valinnutkey
Indeksiä, jossa kenttä on lueteltu, käytetään kyselyn suorittamiseen, kun taas muut indeksit luetellaanpossible_keys
Medium sanoi, että sitä voitaisiin myös harkita, mutta sitä ei lopulta käytetty.
jos key
Kentät ovatNULL
,ja possible_keys
Useita hakemistonimiä on lueteltu kohdassa , mikä osoittaa, että MySQL ei käytä indeksiä suoritettaessa kyselyä, mikä voi johtaa täydelliseen taulukon skannaukseen tai muihin indekseihin perustumattomiin käyttömenetelmiin.
7, key_len
key_len
On kenttä, joka kuvaa indeksiavaimen pituutta. Se ilmaisee indeksin käytön ja indeksiavaimen pituuden, kun MySQL käyttää tiettyä indeksiä kyselyjen suorittamiseen.
Yhden sarakkeen indeksi:
INT
),mutta key_len
Arvo on sarakkeen pituus.VARCHAR
),mutta key_len
Arvo on kentän enimmäispituus.yhdistetty indeksi:
key_len
Edustaa hakemiston kaikkien sarakkeiden kokonaispituutta.yhdistetty indeksi:
key_len
on yhdistetyn indeksin kaikkien sarakkeiden kokonaispituus.indeksin etuliite:
key_len
Käytetyn hakemistoosan todellinen pituus näytetään.8, viite
ref
Se on kenttä, joka kuvaa taulukkojen välisiä yhteysehtoja tai käyttää hakuun ei-ainutlaatuista indeksiä. Se osoittaa, mitä liittymisehtoja tai mitä indeksejä MySQL käyttää taulukon käyttämiseen kyselyä suorittaessaan.
9 riviä
rows
On arvio kyselyä suoritettaessa käytettävien tai tutkittujen rivien määrästä.
SELECT
Tiedustella,rows
Edustaa arvioitua palautettavien rivien määrää.JOIN
) tai alikysely,rows
Voi edustaa liitostoiminnon aikana käytettyjen rivien määrää.rows
Voi edustaa skannattujen rivien määrää.10, suodatettu
Edustaa WHERE-ehtojen ja indeksiehtojen perusteella suodatettujen rivien prosenttiosuutta. suodatettu kuvastaa optimoijan arvioimaa kyselyn optimoinnin vaikutusta.
kun filtered
Kun se on lähellä 100 %, se tarkoittaa, että kyselyehdot ovat tehokkaasti suodattaneet suurimman osan riveistä, jotka eivät täytä ehtoja, mikä on yleensä hyvä optimoinnin indikaattori.
Päinvastoin, jos filtered
Pieni arvo voi tarkoittaa, että kyselyehdot eivät ole riittävän tarkkoja tai että optimoija ei käytä indeksiä tehokkaasti tietojen suodattamiseen.
11, ylimääräinen
Lisätietokentät
Tässä on joitain yleisiä Extra
Kentät ja niiden merkitykset:
Indeksin käyttö:
Käyttämällä missä:
Väliaikainen käyttö:
Tiedostolajittelun käyttäminen:
Kullekin tietueelle tarkistettu alue (hakemistokartta: ...):
range
Kyselytyypissä.Täysi skannaus NULL-näppäimellä:
Erillinen:
Liitospuskurin käyttäminen (Block Nested Loop):
Mahdotonta MISSÄ:
Ei käytettyjä pöytiä:
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;
Tiedot valmistetaan itse.
Yhden taulukon kysely
EXPLAIN SELECT * FROM `s1`;
Liity kyselyyn
EXPLAIN SELECT * FROM `s1` INNER JOIN `s2`;
alikysely
- 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`;
Viimeinen vaihe on duplikoinnin poistaminen, joten väliaikaista taulukkoa käytetään. UNION ALL on kuitenkin kysely kaikille, eikä tilapäistä taulukkokyselyviestiä tule näkyviin.
const (etsi indeksi kerran, vain yksi tulosrivi)
EXPLAIN SELECT * FROM s1 WHERE id = 10002;
eq_ref (etsi rivi toisesta taulukosta ainutlaatuisella indeksillä tai ensisijaisella avaimella)
EXPLAIN SELECT * FROM s1 INNER JOIN s2 ON s1.id = s2.id;
ref (käytä ei-ainutlaatuista indeksiä löytääksesi yhden tai useamman rivin toisesta taulukosta)
EXPLAIN SELECT * FROM s1 WHERE key1 = 'a';
alue (palauttaa rivien alueen indeksin avulla)
EXPLAIN SELECT * FROM s1 WHERE key1 IN ('a', 'b', 'c');
hakemisto (tarkista hakemisto kokonaan löytääksesi rivejä)
EXPLAIN SELECT key_part2 FROM s1 WHERE key_part3 = 'a';
suodatettu desimaaliaika
EXPLAIN SELECT * FROM s1 WHERE key1 > 'za' AND common_field = 'la'