MariaDB bei MySQL yra vienos populiariausių duomenų bazių valdymo sistemų naudojančių SQL kalbą duomenų įvedimui bei išvedimui (rezultatų pateikimui). Nors SQL užklausos yra paprastos komandos, kurias nesunku išmokti, tačiau nevisos užklausos ir duomenų bazės funkcijos atlieka veiksmus taip pat efektyviai. Tai tampa ypač svarbu kai informacijos kiekis duomenų bazėje didėja ir tai pradeda stabdyti svetainės greitį augant lankytojų skaičiui. Šioje pamokoje bus aptariamos kelios paprastos priemonės, kurių galima imtis norint pagreitinti MySQL ir MariaDB užklausas. Testavimams rekomenduojame naudoti virtualų dedikuotą serverį, kuriame jau esate įdiegę MySQL arba MariaDB tarnybą. Kaip tai atlikti, rasite šioje pamokoje: Ubuntu/Debian, CentOS 7.
Lentelių dizaino bendrosios ypatybės
Vienas iš pamatinių būdų pagerinti užklausų greitį taikomas pačių lentelių struktūros dizainui. Todėl tai reiškia, kad efektyviausia pradėti optimizuoti duomenis dar prieš pradedant naudoti duomenų bazes. Todėl pateikiame kelis klausimus į kuriuos turite atsakyti sau prieš pradedant kurti duomenų bazės lenteles:
- Kaip iš esmės bus naudojamos lentelės?
- Nustatymas kaip lentelių duomenys bus naudojami dažniausiai nurodo kelią link geriausio metodo modeliuojant duomenų struktūras. Jei tam tikrus duomenis atnaujinsite dažnai, geriausia, kad jie būtų atskiroje lentelėje. To neatlikus gali sukelti užklausų kešavimą, kuris bus pašalintas ir vėl atstatomas dėl to, kad bus pastebime jog aptinkama nauja informacija. Jei tai atsitiks atskiroje lentelėje, kiti stulpeliai gali ir toliau naudotis kešavimo privalumais.
- Paprastai mažesnių lentelių operacijų atnaujinimas yra greitesnis būdas. Išsami sudėtingų duomenų analizė paprastai yra užduotis, geriausiai pritaikoma didelėms lentelėms, nes prijungimas gali būti pakankamai brangi operacija.
- Kurie duomenų tipai yra reikalingi? Kartais galite sutaupyti daug laiko ilgainiui, jei iš anksto nustatote tam tikrus duomenų dydžių apribojimus. Pavyzdžiui, jei yra ribojamas galimų įrašų skaičius konkrečiame laukelyje, kuriame nurodomos eilutės reikšmės, vietoj „varchar“ galite naudoti „enum“ tipą. Šis duomenų tipas yra kompaktiškenis ir todėl užklausa greičiau apdorojama. Tam, kad būtų aiškiau pateikiame papildomą pavyzdį šioje situacijoje - jei turite tik keletą skirtingų tipų vartotojų, galite sukurti stulpelį, kuriame naudojamas „enum“ duomenų tipas su galimomis reikšmėmis: administratorius, moderatorius, vartotojas.
- Kurį stulpelį naudosite užklausų generavimui? Iš anksto žinant, kurie laukeliai gaus užklausas pakartotinai, gali žymiai pagerinti jūsų duomenų bazės greitį. Stulpelių indeksavimas, kuriuos tikitės naudoti paieškai, labai padeda šioje situacijoje. Kurdami lentelę galite pridėti rodyklę naudodami šią sintaksę: Tai bus naudinga, jeigu žinome, kad naudotojai ieškos informacijos pagal naudotojo vardą: Kaip matote, turite du indikatorius mūsų lentelei. Pirmasis yra pagrindinis raktas, kuris šiuo atveju yra id laukas. Antrasis yra rodyklė, kurią mes įtraukėme į username lauką. Tai pagerins užklausas, kuriose naudojamas šis laukas.
- Nors konceptualiu požiūriu yra naudinga galvoti apie tai, kurie laukai turėtų būti indeksuojami kuriant, lygiai taip pat paprasta pridėti indeksus prie jau esamų lentelių. Pavyzdžiui galite pridėti tokį: Kitas būdas įvykdyti tą patį yra šis: Uzklausose naudokite paaiškinimus, jei norite rasti taškus iki indekso
- Jei jūsų programa teikia užklausas labai nuspėjamu keliu, turėtumėte išanalizuoti savo užklausas, kad įsitikintumėte, jog užklausos naudoja indeksus visose įmanomose vietose. Tai lengva naudojant explain funkciją. Tam, kad pamtytume kaip tai veikia, importuojame MySQL duomenų bazės pavyzdį: Prisijungiame atgal į MySQL tam, kad galėtume paleisti kelias užklausas: Pirmiausia turime nurodyti, kad MySQL neturėtų naudoti kešavimo tam, kad galėtume tiksliai įvertinti, koks laikas reikalingas šių užduočių įvykdymui: Nowo galime vykdyti paprastą užklausą dideliame duomenų rinkinyje: Norėdami pamatyti, kaip MySQL vykdo užklausą, prieš pridėdami užklausą galite pridėti explain raktinį žodį į pačią užklausą: Pažvelgę į key lauką pamatysite, kad jo reikšmė yra NULL. Tai reiškia, kad šiai užklausai nenaudojamas nė vienas indeksas.
- Pridėkime vieną indeksą ir paleiskite užklausą dar kartą, kad patikrintume, ar ji ją paspartina: Kaip matote, tai žymiai pagerina užklausų našumą. Kita bendra taisyklė, kurią reikia naudoti su indeksais - atkreipti dėmesį į lentelių prijungimus. Turėtumėte sukurti indeksus ir nurodyti tą patį duomenų tipą visuose stulpeliuose, kurie bus naudojami sujungiant lenteles.
- Pvz., Jei turite lentelę pavadinimu „cheeses“ ir lentelę pavadinimu „ingredients“, galite prijungti prie panašaus kiekvienos lentelės ingredient_ID lauko, kuris galėtų būti INT. Tada galėtume sukurti abiejų šių sričių indeksus ir mūsų prijungimas paspartėtų.
Užklausų optimizavimas greičiui
Kita galima lygties pusė, bandant pagreitinti užklausas, yra pačių užklausų optimizavimas. Kai kurios operacijos yra skaičiuojamos intensyviau už kitas. Dažnai yra keli būdai, kaip pasiekti šį rezultatą, kai kuriais atvejais pavyks išvengti ilgai trunkančių operacijų. Atsižvelgiant į tai, kam naudojate užklausos rezultatus, kai kuriais atvejais gali būti reikalingas tik riboto rezultatų skaičiaus.
Pavyzdžiui, jei jums reikia tik išsiaiškinti, ar įmonėje yra kas nors, kas uždirba mažiau nei 12 000€, galite naudoti: Ši užklausa vykdoma ypač greitai, nes iš esmės trumpuoju apėjimu pasiekiamas pirmasis teigiamas rezultatas.
Jei jūsų užklausose naudojami palyginimai „or“, o abi komponentų dalys testuoja skirtingus laukus, jūsų užklausa gali būti ilgesnė nei būtina. Pavyzdžiui: jei ieškote darbuotojo, kurio vardas arba pavardė prasideda „Bre“, turėsite ieškoti dviejų atskirų stulpelių. Ši operacija gali būti greičiau įvykdyta, jei vardų ieškosime vienoje užklausoje, o atitinkamų pavardžių kitoje, ir tada sujungsime išvestį. Tai galime padaryti su union operatoriumi. Kai kuriais atvejais MySQL automatiškai naudos union operaciją. Aukščiau pateiktas pavyzdys iš tikrųjų yra atvejis, kai „MySQL“ tai padarys automatiškai. Galite pamatyti, ar taip yra, patikrinę ar rūšiuojama, dar kartą naudodamiesi explain.
Taip pat skaitykite: socialinio agento elgsenos ypatumai
Apibendrinimas
Yra nepaprastai daug būdų, kaip galite patobulinti MySQL ir MariaDB lenteles ir duomenų bazes atsižvelgiant į jūsų naudojimo atvejį. Šiame straipsnyje yra tik keli patarimai, kurie gali būti naudingi norint pradėti optimizavimą. Šios duomenų bazių valdymo sistemos turi puikią dokumentaciją, kaip optimizuoti ir suderinti skirtingus scenarijus. Specifikacija labai priklauso nuo to, kokį funkcionalumą norite optimizuoti, nes priešingu atveju jie būtų buvę automatiškai optimizuoti jau įdiegus sistemą.
Duomenys duomenų bazėje yra padalintos atskirose lentelėse. Būtų gerai, jeigu būtų galima visus duomenis turėti vienoje lentelėje ir iš jos atsirinkti kas domina. Tokios galimybės reikalauja reliacinės duomenų bazės principai. SQL kalba ir reliacinė duomenų bazės, pastarąją sąlygą išpildo su apjungimu (angl. JOIN). Lentelės apjungiamos į vieną didelę lentelę, kur kiekvienai eilutei iš pirmos lentelės yra sudaromos naujos eilutės tiek, kiek jų yra antrojoje lentelėje. Palengvinti pastarojo tipo apjungimą galima pasinaudoti vidiniu apjungimu INNER JOIN ON. INNER yra numatytoji reikšmė, todėl nėra būtina. 1. 2. 3. Šiame straipsnyje išsamiai aptariama, kaip pašalinti lentelės apribojimus SQL duomenyse. Straipsnyje remiamasi įvairių duomenų bazių apribojimų ypatybėmis. Pateikiamos instrukcijos, kaip peržiūrėti, kurti ir, svarbiausia, pašalinti apribojimus.
Apribojimų tipai SQL
SQL apribojimai yra taisyklės, kurios apriboja į duomenų bazės lentelę įrašomų duomenų tipą. Jie naudojami duomenų vientisumui užtikrinti ir neteisingų duomenų įvedimui į lenteles apriboti. Yra keletas skirtingų tipų SQL apribojimų, įskaitant: PRIMARY KEY, FOREIGN KEY, UNIQUE, NOT NULL, CHECK, DEFAULT. Šiame straipsnyje daugiausia dėmesio skiriama CHECK apribojimams, tačiau principai, kaip pašalinti apribojimus, galioja ir kitiems tipams.
Apribojimų peržiūra: prieš pašalinant apribojimą, svarbu jį peržiūrėti. SQL Server suteikia galimybę peržiūrėti lentelės tikrinimo apribojimų ypatybes. Apribojimų kūrimas: nors šis skyrius skirtas apribojimų šalinimui, svarbu paminėti ir jų kūrimą. Norėdami sukurti naują apribojimą pasirinktoje lentelėje, galite naudoti atitinkamą SQL sintaksę.
Apribojimų šalinimas SQL: pagrindinis būdas pašalinti apribojimą yra naudoti ALTER TABLE sakinį su DROP CONSTRAINT fraze. Sintaksė: ALTER TABLE lentelės_pavadinimas DROP CONSTRAINT apribojimo_pavadinimas. Svarbu žinoti apribojimo pavadinimą, kurį norite pašalinti. Jei nežinote pavadinimo, galite jį rasti peržiūrėdami lentelės apibrėžimą arba naudodami duomenų bazės valdymo įrankius. Pavyzdys: ALTER TABLE Customers DROP CONSTRAINT CK_Age; Įvykdžius šį sakinį, apribojimas CK_Age bus pašalintas iš lentelės Customers.
Taip pat skaitykite: Sprendimo dėl nedarbingumo pensijos apskundimas
Apribojimų šalinimas su priklausomybėmis: kartais apribojimai turi priklausomybių. Pavyzdžiui, FOREIGN KEY apribojimas priklauso nuo PRIMARY KEY apribojimo kitoje lentelėje. Tokiais atvejais prieš šalinant PRIMARY KEY apribojimą reikia pašalinti FOREIGN KEY apribojimą.
🔥 Kaip sukčiai užkrečia jūsų kompiuterį ir kaip atpažinti jų laiškus?
SSMS (SQL Server Management Studio) arba grafinės sąsajos priemonės gali padėti valdyti apribojimus grafiniu būdu. Tačiau svarbu būti atsargiems: pašalinus apribojimą, duomenų vientisumas gali būti prarastas ir tai gali lemti neteisingus ar nenuoseklius duomenis.
Taip pat skaitykite: Senatvinių dėmių šalinimo patarimai
tags: #kas #leidzia #panaikinti #visus #lenteles #suvarzymus