Teknologian jakaminen

Mysql selittää lauseen yksityiskohtainen selitys ja esimerkkinäyttö

2024-07-12

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

Esittele ensin lyhyesti sql:

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.

Tietoja valtuutuslausekkeista

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ä

Selitä lausunnon johdanto

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ä?

  • Taulukon lukujärjestys
  • Tietojen lukutoiminnon toimintatyyppi
  • Mitä indeksejä voidaan käyttää
  • Mitä indeksejä todella käytetään
  • Viitteet taulukoiden välillä
  • Kuinka monta riviä kussakin taulukossa optimoija kysyy

Perussyntaksin esittely

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

selitä kunkin sarakkeen toiminta

ListakuvataTäydentää
idJokainen SELECT-avainsana vastaa id:tä

select_type

SELECT-avainsanaa vastaava kyselytyyppi
pöytäTaulukon nimi
väliseinätOsion tiedot vastaavat
tyyppiYhden pöydän käyttötapa
mahdolliset_avaimetMahdolliset indeksit
avaintodellinen käytetty indeksi
key_lenTodellinen käytetty indeksin pituus
viiteKun käytetään indeksisarakkeen vastaavuuskyselyä, objektitiedot, jotka vastaavat indeksisaraketta, vastaavuus.
rivitArvioitu luettavien tietueiden määrä
suodatettuJäljellä olevien tietueiden prosenttiosuus hakuehtojen mukaan suodattamisen jälkeen

    

ylimääräistä

Lisätieto

               

Yksityiskohtainen johdatus jokaiseen EXPLAIN-sarakkeeseen

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

kategoriahavainnollistaa
YKSINKERTAINENYhden taulukon kysely, ei alikyselyä tai UNION-kysely.
ENSISIJAINENKyselyn uloin SELECT-lause.
ALAKYSELYWHERE-lauseessa käytetään alikyselyä.
JOHDETTUFROM-lauseeseen sisältyville alikyselyille MySQL merkitsee sen DERIVED (johdettu) ja luo väliaikaisen taulukon tulosjoukolleen ulkoisen kyselyn käyttöä varten.
LIITTOToinen ja sitä seuraavat kyselylausekkeet UNION-kyselyssä.
UNIONIN TULOSUNION-kyselyn tulosjoukko.
RIIPPUVA ALAKYSYMYSAlikyselyn tulos riippuu ulomman kyselyn arvosta, ja alikysely suoritetaan kerran jokaiselle ulkokyselyn riville.
RIIPPULLINEN UNIONIUNION-kyselyn toinen ja sitä seuraavat kyselylauseet ja tulokset riippuvat ulkoisen kyselyn arvosta
MATKAA ALAKYSYMYSAlikyselyä 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

tyyppihavainnollistaa
järjestelmäTaulukossa on yleensä vain yksi rivi SELECT ... FROM DUAL Kyselyn optimointi.
konstKysely löytyy indeksin kautta kerran, vain yhdellä tulosrivillä (vakiotaulukko).
eq_refKäytä yksilöllistä indeksiä tai ensisijaista avainta löytääksesi rivi toisesta taulukosta.
viiteKäytä ei-yksilöllistä hakemistoa löytääksesi yhden tai useamman rivin toisesta taulukosta.
aluePalauta rivit indeksin avulla.
indeksiTarkistaa indeksin kokonaan löytääkseen rivejä koko taulukon tarkistamisen sijaan.
kaikkiTäysi taulukon tarkistus tarkistaa jokaisen taulukon rivin.

Yleensä yritä välttää kaikkea

6, avain ja mahdolliset_avaimet

  1. 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.
  2. 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.

  1. Yhden sarakkeen indeksi

    • Jos käytetään yhden sarakkeen indeksiä ja saraketyyppi on kiinteä (esim. INT),mutta key_len Arvo on sarakkeen pituus.
    • Jos käytetään vaihtelevan pituisia kenttiä (esim. VARCHAR),mutta key_len Arvo on kentän enimmäispituus.
  2. yhdistetty indeksi

    • Yhdistelmäindeksit (eli indeksit, jotka sisältävät useita sarakkeita)key_len Edustaa hakemiston kaikkien sarakkeiden kokonaispituutta.
  3. yhdistetty indeksi

    • Jos kyselyssä käytetään usean sarakkeen yhdistettyä indeksiä,key_len on yhdistetyn indeksin kaikkien sarakkeiden kokonaispituus.
  4. indeksin etuliite

    • Joissakin tapauksissa MySQL voi käyttää vain osaa indeksistä. Voit esimerkiksi käyttää hakemiston etuliitettä osana hakemistoa kyselyn suorittamiseen. tässä tapauksessa,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ä.

  • yksinkertaiselle SELECT Tiedustella,rows Edustaa arvioitua palautettavien rivien määrää.
  • Liittymiskyselyihin (JOIN) tai alikysely,rows Voi edustaa liitostoiminnon aikana käytettyjen rivien määrää.
  • Taulukkoskannaus (täysi taulukkoskannaus tai hakemistoskannaus),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:

  1. Indeksin käyttö

    • Ilmaisee, että kysely käyttää peittävää indeksiä, eli kyselyn tulokset voidaan palauttaa kokonaan indeksin kautta ilman, että taulukon todellisia tietorivejä tarvitsee käyttää.
  2. Käyttämällä missä

    • Osoittaa, että MySQL-palvelin suorittaa ehdollisen suodatuksen sen jälkeen, kun tallennuskone on noutanut rivit sen sijaan, että se täydentäisi niitä indeksissä.
  3. Väliaikainen käyttö

    • Osoittaa, että MySQL on luonut väliaikaisen taulukon muistiin kyselyn käsittelemiseksi. Käytetään yleisesti lajitteluoperaatioissa tai koostefunktioita sisältävissä kyselyissä.
  4. Tiedostolajittelun käyttäminen

    • Osoittaa, että MySQL suoritti tiedostojen lajittelun kyselyn käsittelemiseksi. Tämä tapahtuu yleensä silloin, kun lajittelua ei voi tehdä indeksin avulla.
  5. Kullekin tietueelle tarkistettu alue (hakemistokartta: ...)

    • Osoittaa, että MySQL käyttää indeksiä tarkistaakseen, ovatko kukin tietue määritetyllä alueella.Tämä tapahtuu yleensä silloin, kunrange Kyselytyypissä.
  6. Täysi skannaus NULL-näppäimellä

    • Osoittaa, että MySQL suoritti täyden taulukon tarkistuksen indeksissä löytääkseen rivit, jotka vastaavat NULL-arvoja.
  7. Erillinen

    • Osoittaa, että MySQL lopettaa kaksoisrivien etsimisen ensimmäisen vastaavan rivin löytämisen jälkeen.
  8. Liitospuskurin käyttäminen (Block Nested Loop)

    • Osoittaa, että MySQL käyttää yhteyspuskuria yhteystoiminnon käsittelemiseen. Tämä tapahtuu yleensä, kun yhteystaulukoiden määrä on suuri tai yhteystaulukon koko.
  9. Mahdotonta MISSÄ

    • Osoittaa, että MySQL-optimoija on määrittänyt, että WHERE-lauseen ehtoja ei voida täyttää, ja siksi rivejä ei tarkisteta.
  10. Ei käytettyjä pöytiä

    • Osoittaa, että kysely ei sisällä esimerkiksi taulukoita SELECT NOW()

selittää todellisen suoritusnäytön

tietojen valmistelu

Luo taulukko 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;

Luo taulukko 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;

Tiedot valmistetaan itse.

Esimerkkisuoritus ja tulokset

Yksinkertainen kysely

Yhden taulukon kysely

EXPLAIN SELECT * FROM `s1`;

Liity kyselyyn

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

alikysely

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

erityinen näyttö

näytä 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`;

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.

tyyppinen luokka

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';

Muut näytöt

suodatettu desimaaliaika

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