Padidinkite SQL užklausos našumą naudodami MSSQL. Šiame informaciniame vadove sužinokite, kaip optimizuoti užklausas, kad jos būtų efektyvesnės ir spartesnės.
Neoptimizuotos Microsoft SQL Server (MSSQL) SQL užklausos gali sukelti prastesnį našumą, pernelyg didelį išteklių naudojimą, nenuoseklius duomenis, saugos trūkumus ir priežiūros sunkumus. Šios problemos gali turėti įtakos jūsų programos funkcionalumui, patikimumui ir saugumui, o tai gali nuvilti vartotojus ir kainuoti daugiau pinigų.
SQL užklausų optimizavimas MSSQL yra labai svarbus norint pasiekti efektyvų ir greitą našumą. Įdiegę tokius metodus kaip indeksavimas, užklausų supaprastinimas ir saugojimo procedūros, vartotojai gali subalansuokite užklausos našumą ir duomenų modifikavimo našumą, galiausiai pagerindami bendrą duomenų bazę spektaklis.
Užklausos optimizavimas indeksuojant
Duomenų bazės indeksavimas tvarko ir rūšiuoja duomenis duomenų bazės lentelėse, kad paieška būtų greitesnė ir efektyvesnė. Indeksuojant sukuriamos duomenų kopijos lentelėse ir surūšiuojamos taip duomenų bazės variklis gali lengvai juos naršyti.
Vykdant užklausą duomenų bazės variklis naudoja indeksą, kad surastų reikiamus duomenis ir greitai grąžina rezultatus, taip pagreitindamas užklausos vykdymo laiką. Be indeksavimo duomenų bazės variklis turi nuskaityti visas lentelės eilutes, kad surastų reikiamus duomenis, o tai gali pareikalauti laiko ir resursų, ypač didelėms lentelėms.
Indekso kūrimas MSSQL
Sukurti indeksą reliacinėse duomenų bazėse yra paprasta, o MSSQL nėra pamirštama. Galite naudoti KURTI RODYKLĄ teiginį, kad sukurtumėte indeksą MSSQL.
KURTIINDEKSAS indekso_pavadinimas
ON lentelės_pavadinimas (stulpelis1, stulpelis2, ...);
Aukščiau pateiktame SQL kode indekso_pavadinimas yra indekso pavadinimas, lentelės_pavadinimas yra lentelės pavadinimas ir 1 stulpelis, 2 stulpelis, ir t. t. yra indeksuojamų stulpelių pavadinimai.
Štai kaip sukurti nesugrupuotą indeksą a Klientai stalo Pavardė stulpelį su SQL sakiniu.
KURTI NEKLASTERIUOTA INDEKSAS IX_Customers_LastName
ON Klientai (Pavardė);
Teiginys sukuria nesugrupuotą indeksą, vadinamą IX_Customers_LastName ant Pavardė stulpelyje Klientai stalo.
Indeksavimo kaina
Nors indeksavimas gali žymiai pagerinti užklausos našumą, tai kainuoja. Indeksuojant reikia papildomos vietos diske indeksui saugoti, o indeksavimo operacijos gali sulėtinti duomenų keitimo operacijas, tokias kaip įterpimas, atnaujinimas ir ištrynimas. Turite atnaujinti duomenų keitimo rodyklę, o didelių lentelių atnaujinimas gali užtrukti.
Todėl labai svarbu subalansuoti užklausos našumą ir duomenų modifikavimo našumą. Turėtumėte kurti indeksus tik stulpeliuose, kuriuose ieškosite dažnai. Taip pat labai svarbu reguliariai stebėti indekso išteklių naudojimą ir pašalinti nereikalingus indeksus.
Užklausos optimizavimas supaprastinant užklausą
Duomenų analizei sudėtingos užklausos yra naudingos duomenims išgauti. Tačiau sudėtingos užklausos turi įtakos našumui ir gali sukelti neefektyvų duomenų išgavimą.
Užklausų supaprastinimas apima sudėtingų užklausų suskaidymą į mažesnes, paprastesnes, kad būtų galima greičiau ir mažiau išteklių apdoroti.
Užklausų supaprastinimas pagerina našumą ir palengvina duomenų išgavimą, nes sudėtingos užklausos gali sukelti sistemos kliūtis. Juos sunku suprasti, todėl kūrėjams ir analitikams sunkiau išspręsti problemas arba nustatyti optimizavimo sritis.
Štai sudėtingos užklausos, vykdomos MSSQL, pavyzdys, skirta klientų užsakymų lentelei, kurios tikslas yra nustatyti duomenų tendencijas ir modelius:
PASIRINKTI
Kliento vardas,
COUNT(užsakymo_id) AS total_ orders,
AVG(užsakymo_suma) AS vidutinė_užsakymo_suma,
SUM(užsakymo_suma) AS bendras_pardavimas
NUO
įsakymus
KUR
order_date TARP „2022-01-01“ IR „2022-12-31“
AND order_status = 'baigta'
GRUPUOTI PAGAL
Kliento vardas
TURIMAS
SKAIČIUS(užsakymo_id) > 5
RŪŠIUOTI PAGAL
total_sales DESC;
Pagal užklausą ieškoma klientų vardų ir pardavimo informacijos iš įvykdytų užsakymų 2022 m., o klientai, turintys mažiau nei penkis užsakymus, filtruojami pagal bendrą pardavimą mažėjančia tvarka.
Užklausa gali suteikti vertingų įžvalgų, tačiau ji sudėtinga ir galiausiai užtruks ilgiau, ypač jei įsakymus lentelėje yra daug įrašų.
Galite supaprastinti užklausą suskaidydami užklausą į mažesnes užklausas, kurios vykdomos po vieną.
- Gaukite klientų vardų sąrašą ir bendrą jų pateiktų užsakymų skaičių
PASIRINKTI
Kliento vardas,
COUNT(užsakymo_id) AS iš viso_užsakymų
NUO
įsakymus
KUR
order_date TARP „2022-01-01“ IR „2022-12-31“
AND order_status = 'baigta'
GRUPUOTI PAGAL
Kliento vardas
TURIMAS
SKAIČIUS(užsakymo_id) > 5;- Gaukite vidutinę užsakymo sumą kiekvienam klientui
PASIRINKTI
Kliento vardas,
AVG(užsakymo_suma) AS vidutinė_užsakymo_suma
NUO
įsakymus
KUR
order_date TARP „2022-01-01“ IR „2022-12-31“
AND order_status = 'baigta'
GRUPUOTI PAGAL
Kliento vardas
TURIMAS
SKAIČIUS(užsakymo_id) > 5;
- Gaukite bendrą kiekvieno kliento pardavimą
PASIRINKTI
Kliento vardas,
SUM(užsakymo_suma) AS bendras_pardavimas
NUO
įsakymus
KUR
order_date TARP „2022-01-01“ IR „2022-12-31“
AND order_status = 'baigta'
GRUPUOTI PAGAL
Kliento vardas
TURIMAS
SKAIČIUS(užsakymo_id) > 5
RŪŠIUOTI PAGAL
total_sales DESC;
Šis supaprastintas metodas atskiria klientų vardų ir visų užsakymų, vidutinių užsakymų sumų ir bendro pardavimo kiekvieno kliento užduotis į atskiras užklausas. Kiekviena užklausa turi konkrečius tikslus ir yra optimizuota konkrečioms užduotims, todėl duomenų bazei lengviau apdoroti pagal užklausą.
Patarimai, kaip supaprastinti užklausą
Kai supaprastinate užklausas, labai svarbu sutelkti dėmesį į vieną užduotį per kartą, kad sukurtumėte užklausas, kurios būtų optimizuotos konkrečiai užduočiai. Susitelkimas į vieną užduotį gali žymiai pagerinti našumą.
Be to, svarbu naudoti geras pavadinimų taisykles, kad kodą būtų lengviau suprasti ir prižiūrėti. Galite lengvai nustatyti galimas sistemos problemas ir tobulinimo sritis.
Užklausos optimizavimas naudojant saugomas procedūras
Saugomos procedūros yra iš anksto parašytų SQL sakinių rinkiniai, saugomi duomenų bazėje. Išsaugotas procedūras galite naudoti įvairioms operacijoms atlikti – nuo atnaujinimo iki duomenų įterpimo ar gavimo iš duomenų bazės. Išsaugotos procedūros gali priimti parametrus. Galite juos skambinti iš skirtingų programavimo kalbų, todėl jie yra galingas programų kūrimo įrankis.
Štai pavyzdys, kaip sukurti saugomą MSSQL procedūrą, kuri grąžina vidutinį skyriaus darbuotojų atlyginimą:
KURTIPROCEDŪRA [dbo].[GetAverageSalary]
@DepartmentName VARCHAR(50)
AS
PRADĖTI
PASIRINKTIAVG(Atlyginimas) kaip Vidutinis atlyginimas
IŠ Darbuotojų
WHERE Skyrius = @DepartmentName
GALAS
Išsaugotoje procedūroje apibrėžėte parametrą, vadinamą @Departamento pavadinimas ir naudojo KUR sąlyga, kad rezultatai būtų filtruojami pagal skyrių. Jūs taip pat naudojote AVG funkcija skaičiuoti skyriaus darbuotojų vidutinį darbo užmokestį.
Galite vykdyti saugomas procedūras MSSQL su EXEC pareiškimas.
Štai kaip galite atlikti aukščiau aprašytą saugomą procedūrą:
EXEC [dbo].[GetAverageSalary] @DepartmentName = 'Pardavimas'
Išsaugotame procedūros vykdymo sakinyje perduodate Pardavimai reikšmę kaip skyriaus pavadinimą. Išraše bus grąžintas vidutinis darbuotojo atlyginimas pardavimo skyriuje.
Kaip saugomos procedūros pagerina užklausos našumą?
Išsaugotos procedūros gali žymiai pagerinti užklausos našumą. Pirma, saugomos procedūros sumažina tinklo srautą vykdydamos SQL sakinius serverio pusėje, o ne perkeldamos duomenis pirmyn ir atgal tarp kliento ir serverio, taip sumažinant tinklu siunčiamų duomenų kiekį ir atsakymą į užklausą laikas.
Antra, galite sudaryti saugomas talpyklos procedūras, o tai reiškia, kad vykdymo planas saugomas atmintyje. Kai iškviečiate išsaugotą procedūrą, serveris nuskaito vykdymo planą iš atminties, o ne perkompiliuoja SQL sakinius, taip sumažinant saugomos procedūros vykdymo laiką ir pagerinant užklausą spektaklis.
Galite nustatyti MSSQL Ubuntu
MSSQL padarė didelę pažangą palaikydama Ubuntu ir kitus Linux platinimus. „Microsoft“ pripažino augantį „Linux“ populiarumą įmonėje ir nusprendė išplėsti savo pavyzdinio duomenų bazių serverio prieinamumą „Linux“ platformoms.