Suurendage SQL-päringu jõudlust MSSQL-iga. Sellest informatiivsest juhendist saate teada, kuidas oma päringuid tõhususe ja kiiruse huvides optimeerida.

Optimeerimata Microsoft SQL Serveri (MSSQL) SQL-päringud võivad põhjustada kehvemat jõudlust, ressursside ülekasutamist, ebajärjekindlaid andmeid, turvavigu ja hooldusraskusi. Need probleemid võivad mõjutada teie programmi funktsionaalsust, töökindlust ja turvalisust, mis võib kasutajaid häirida ja teile rohkem raha maksta.

SQL-päringute optimeerimine MSSQL-is on tõhusa ja kiire jõudluse saavutamiseks ülioluline. Rakendades selliseid tehnikaid nagu indekseerimine, päringute lihtsustamine ja salvestusprotseduurid, saavad kasutajad seda teha tasakaalustab päringu jõudlust ja andmete muutmise jõudlust, parandades lõpuks üldist andmebaasi esitus.

Päringu optimeerimine indekseerimise kaudu

Andmebaasi indekseerimine korraldab ja sorteerib andmeid andmebaasi tabelites, et muuta otsing kiiremaks ja tõhusamaks. Indekseerimine loob andmetest tabelitesse koopiad ja sorteerib need nii andmebaasi mootor saab nendes hõlpsalt navigeerida.

Päringu täitmisel kasutab andmebaasimootor vajalike andmete leidmiseks indeksit ja tagastab kiiresti tulemused, kiirendades seeläbi päringu täitmise aega. Ilma indekseerimiseta peab andmebaasimootor vajalike andmete leidmiseks skannima kõiki tabeli ridu ning see võib olla aja- ja ressursimahukas, eriti suurte tabelite puhul.

Indeksi loomine MSSQL-is

Relatsiooniandmebaasides indeksi loomine on lihtne ja MSSQL-i ei jäeta tähelepanuta. Võite kasutada LOO INDEX avaldus MSSQL-is indeksi loomiseks.

LOOINDEX indeksi_nimi
ON tabeli_nimi (veerg1, veerg2, ...);

Ülaltoodud SQL-koodis indeksi_nimi on indeksi nimi, tabeli_nimi on tabeli nimi ja veerg1, veerg2ja nii edasi on indekseeritavate veergude nimed.

Siin on, kuidas luua rühmitamata indeksit a Kliendid lauad Perekonnanimi veerus SQL-lausega.

LOO MITTEKLASTEERITUD INDEX IX_Customers_LastName
ON Kliendid (Perenimi);

Avaldus loob rühmitamata indeksi nimega IX_Customers_LastName peal Perekonnanimi veerus Kliendid laud.

Indekseerimise maksumus

Kuigi indekseerimine võib päringu jõudlust märkimisväärselt parandada, on see kulukas. Indekseerimine nõuab indeksi salvestamiseks täiendavat kettaruumi ja indekseerimistoimingud võivad aeglustada andmete muutmise toiminguid, nagu lisamine, värskendamine ja kustutamine. Andmete muutmisel peate indeksi värskendama ja suurte tabelite värskendamine võib olla aeganõudev.

Seetõttu on oluline tasakaalustada päringu jõudlust ja andmete muutmise jõudlust. Peaksite looma indeksid ainult veergudele, mida otsite sageli. Samuti on oluline regulaarselt jälgida indeksiressursside kasutamist ja eemaldada mittevajalikud indeksid.

Päringu optimeerimine päringu lihtsustamise kaudu

Andmete analüüsimisel tulevad kasuks keerukad päringud andmete väljavõtmiseks. Kuid keerukad päringud mõjutavad jõudlust ja võivad põhjustada ebatõhusa andmete hankimise.

Päringute lihtsustamine hõlmab keerukate päringute jagamist väiksemateks ja lihtsamateks, et tagada kiirem ja vähem ressursimahukas töötlemine.

Päringu lihtsustamine parandab jõudlust ja muudab andmete ekstraheerimise lihtsamaks, jagades keerulised päringud lihtsamateks päringuteks, kuna keerulised päringud võivad süsteemis kitsaskohti tekitada. Neid on raske mõista, mistõttu on arendajatel ja analüütikutel raskem probleemide tõrkeotsingut või optimeerimisvaldkondade tuvastamist.

Siin on näide keerukast päringust, mis töötab MSSQL-is klientide tellimuste tabeli jaoks, mille eesmärk on tuvastada andmete trendid ja mustrid.

VALI
Kliendi nimi,
COUNT(tellimuse_id) AS tellimusi kokku,
AVG(tellimuse_summa) AS keskmine_tellimuse_summa,
SUM(tellimuse_summa) AS kogu_müük
FROM
korraldusi
KUS
order_date '2022-01-01' JA '2022-12-31' VAHAL
JA order_status = 'lõpetatud'
GROUP BY
Kliendi nimi
OMAMINE
COUNT(tellimuse_id) > 5
TELLI
kokku_müügi DESC;

Päring otsib klientide nimesid ja müügiteavet 2022. aastal täidetud tellimuste kohta, filtreerides samal ajal kliente, kellel on vähem kui viis tellimust kogumüügi järgi kahanevas järjekorras.

Päring võib anda väärtuslikku teavet, kuid see on keeruline ja selle töötlemine võtab lõpuks kauem aega, eriti kui korraldusi tabelis on palju kirjeid.

Saate päringut lihtsustada, jagades päringu väiksemateks päringuteks, mis täidetakse ükshaaval.

- Hankige klientide nimede loend ja nende esitatud tellimuste koguarv
VALI
Kliendi nimi,
COUNT(tellimuse_id) AS tellimusi kokku
FROM
korraldusi
KUS
order_date '2022-01-01' JA '2022-12-31' VAHAL
JA order_status = 'lõpetatud'
GROUP BY
Kliendi nimi
OMAMINE
LOEND(tellimuse_id) > 5;

- Hankige iga kliendi keskmine tellimuse summa
VALI
Kliendi nimi,
AVG(tellimuse_summa) AS keskmine_tellimuse_summa
FROM
korraldusi
KUS
order_date '2022-01-01' JA '2022-12-31' VAHAL
JA order_status = 'lõpetatud'
GROUP BY
Kliendi nimi
OMAMINE
LOEND(tellimuse_id) > 5;

- Hankige iga kliendi müügi kogusumma
VALI
Kliendi nimi,
SUM(tellimuse_summa) AS kogu_müük
FROM
korraldusi
KUS
order_date '2022-01-01' JA '2022-12-31' VAHAL
JA order_status = 'lõpetatud'
GROUP BY
Kliendi nimi
OMAMINE
COUNT(tellimuse_id) > 5
TELLI
kokku_müügi DESC;

See lihtsustatud lähenemisviis jagab iga kliendi jaoks klientide nimede ja tellimuste kogusumma, keskmise tellimuste summa ja müügi kogumahu hankimise ülesanded eraldi päringuteks. Igal päringul on kindlad eesmärgid ja see on optimeeritud konkreetsete ülesannete jaoks, muutes andmebaasi taotluse korral töötlemise lihtsamaks.

Nõuanded päringu lihtsustamiseks

Kui lihtsustate päringuid, on oluline keskenduda ühele ülesandele korraga, et luua päringuid, mis on konkreetse ülesande jaoks optimeeritud. Ühele ülesandele keskendumine võib jõudlust oluliselt parandada.

Samuti on oluline kasutada häid nimetamistavasid, et koodi oleks lihtsam mõista ja hooldada. Saate hõlpsasti tuvastada süsteemi võimalikud probleemid ja parendusvaldkonnad.

Päringu optimeerimine salvestatud protseduuride kaudu

Salvestatud protseduurid on eelnevalt kirjutatud SQL-lausete komplektid, mis on salvestatud andmebaasi. Salvestatud protseduure saate kasutada mitmesuguste toimingute tegemiseks alates värskendamisest kuni andmete sisestamise või väljavõtmiseni andmebaasist. Salvestatud protseduurid võivad parameetreid aktsepteerida. Saate neile helistada erinevatest programmeerimiskeeltest, muutes need võimsaks tööriistaks rakenduste arendamiseks.

Siin on näide MSSQL-i jaoks salvestatud protseduuri loomisest, mis tagastab osakonna töötajate keskmise palga:

LOOMENETLUS [dbo].[GetAverageSalary]
@DepartmentName VARCHAR(50)
AS
ALUSTA
VALIAVG(palk) nagu Keskmine palk
Töötajatelt
KUS osakond = @osakonna nimi
LÕPP

Salvestatud protseduuris määratlesite parameetri nimega @Osakonna nimi ja kasutas KUS klausel tulemuste filtreerimiseks osakonna järgi. Sa kasutasid ka AVG funktsioon osakonna töötajate keskmise palga arvutamiseks.

Saate käivitada MSSQL-is salvestatud protseduure EXEC avaldus.

Ülaltoodud salvestatud protseduuri saate teostada järgmiselt.

EXEC [dbo].[GetAverageSalary] @DepartmentName = 'Müük'

Salvestatud protseduuri täitmislauses edastate Müük väärtus osakonna nimena. Väljavõttel tagastatakse müügiosakonna töötaja keskmine palk.

Kuidas salvestatud protseduurid päringu jõudlust parandavad?

Salvestatud protseduurid võivad päringu jõudlust oluliselt parandada. Esiteks vähendavad salvestatud protseduurid võrguliiklust, täites SQL-lauseid pigem serveri poolel kui andmeid edastades edasi-tagasi kliendi ja serveri vahel, vähendades seeläbi võrgu kaudu saadetavate andmete hulka ja päringuvastust aega.

Teiseks saate koostada salvestatud vahemällu salvestamise protseduure, mis tähendab täitmisplaani salvestamist mällu. Kui helistate salvestatud protseduurile, hangib server täitmisplaani mälust, mitte ei kompileerib seda uuesti SQL-lauseid, vähendades seeläbi salvestatud protseduuri täitmisaega ja parandades päringut esitus.

Saate seadistada MSSQL-i Ubuntus

MSSQL on teinud olulisi edusamme Ubuntu ja teiste Linuxi distributsioonide toetamisel. Microsoft tunnistas Linuxi kasvavat populaarsust ettevõttes ja otsustas laiendada oma lipulaeva andmebaasiserveri kättesaadavust Linuxi platvormidele.