Boost SQL-forespørgselsydeevne med MSSQL. Lær hvordan du optimerer dine forespørgsler til effektivitet og hastighed i denne informative guide.

Uoptimeret Microsoft SQL Server (MSSQL) SQL-forespørgsler kan resultere i uovertruffen ydeevne, ressourceoverforbrug, inkonsistente data, sikkerhedsfejl og vedligeholdelsesproblemer. Disse problemer kan påvirke dit programs funktionalitet, pålidelighed og sikkerhed, hvilket kan frustrere brugerne og koste dig flere penge.

Optimering af SQL-forespørgsler i MSSQL er afgørende for at opnå effektiv og hurtig ydeevne. Ved at implementere teknikker som indeksering, forespørgselsforenkling og lagringsprocedurer kan brugerne balancere forespørgselsydeevne og datamodifikationsydelse, hvilket i sidste ende forbedrer den samlede database ydeevne.

Forespørgselsoptimering gennem indeksering

Databaseindeksering organiserer og sorterer data i databasetabeller for at gøre søgning hurtigere og mere effektiv. Indeksering opretter kopier af data i tabeller og sorterer dem, så de database motor kan nemt navigere i dem.

Ved udførelse af forespørgsler bruger databasemotoren indekset til at finde de nødvendige data og returnerer hurtigt resultater, hvorved udførelsestiden for forespørgsler fremskyndes. Uden indeksering skal databasemotoren scanne alle rækker i tabellen for at finde de nødvendige data, og det kan være tids- og ressourcekrævende, især for store tabeller.

Oprettelse af et indeks i MSSQL

Det er nemt at oprette et indeks i relationelle databaser, og MSSQL bliver ikke overset. Du kan bruge OPRET INDEKS sætning for at oprette et indeks i MSSQL.

SKABINDEKS indeksnavn
ON tabelnavn (kolonne1, kolonne2, ...);

I SQL-koden ovenfor, indeksnavn er navnet på indekset, tabelnavn er bordets navn, og kolonne 1, kolonne 2, og så videre er navnene på de kolonner, der skal indekseres.

Sådan opretter du et ikke-klynget indeks på en Kunder bordets Efternavn kolonne med en SQL-sætning.

SKAB IKKE-KLYNDERET INDEKS IX_Customers_LastName
ON-kunder (Efternavn);

Udsagnet opretter et ikke-klynget indeks kaldet IX_Customers_LastName på den Efternavn kolonne af Kunder bord.

Omkostningerne ved indeksering

Mens indeksering kan forbedre forespørgselsydeevnen betydeligt, har det en omkostning. Indeksering kræver ekstra diskplads for at gemme indekset, og indekseringshandlinger kan forsinke dataændringshandlinger såsom indsættelser, opdateringer og sletninger. Du skal opdatere indekset ved dataændring, og opdateringsoperationen kan være tidskrævende for store tabeller.

Derfor er det vigtigt at balancere forespørgselsydeevne og datamodifikationsydelse. Du bør kun oprette indekser på kolonner, som du ofte vil søge efter. Det er også vigtigt regelmæssigt at overvåge brugen af ​​indeksressourcer og fjerne unødvendige indekser.

Forespørgselsoptimering gennem forespørgselsforenkling

Til dataanalyse er komplekse forespørgsler nyttige til dataudtræk. Imidlertid har komplekse forespørgsler en indvirkning på ydeevnen, og de kan resultere i ineffektiv dataudtræk.

Forenkling af forespørgsler involverer at opdele komplekse forespørgsler i mindre, enklere forespørgsler for hurtigere og mindre ressourcekrævende behandling.

Forenkling af forespørgsler forbedrer ydeevnen og gør dataudtrækning lettere ved at opdele komplekse forespørgsler i enklere forespørgsler, da komplekse forespørgsler kan forårsage flaskehalse i systemet. De er svære at forstå, hvilket gør det sværere for udviklere og analytikere at fejlfinde problemer eller identificere områder med optimering.

Her er et eksempel på en kompleks forespørgsel, der kører på MSSQL for en tabel over kundeordrer, hvor målet er at identificere tendenser og mønstre i dataene:

VÆLG
Kundenavn,
COUNT(ordre_id) AS total_orders,
AVG(ordre_amount) AS average_order_amount,
SUM(ordre_beløb) AS total_salg
FRA
Ordre:% s
HVOR
ordredato MELLEM '2022-01-01' OG '2022-12-31'
OG order_status = 'fuldført'
GRUPPE EFTER
Kundenavn
AT HAVE
COUNT(ordre_id) > 5
BESTIL EFTER
total_salg DESC;

Forespørgslen søger efter kundenavne og salgsoplysninger fra afsluttede ordrer i 2022, mens kunder med færre end fem ordrer filtreres efter samlet salg i faldende rækkefølge.

Forespørgslen kan give værdifuld indsigt, men den er kompleks og vil i sidste ende tage længere tid at behandle, især hvis Ordre:% s tabellen har mange poster.

Du kan forenkle forespørgslen ved at opdele forespørgslen i mindre forespørgsler, der udføres én ad gangen.

-- Få en liste over kundenavne og det samlede antal ordrer, de har afgivet
VÆLG
Kundenavn,
COUNT(ordre_id) AS total_orders
FRA
Ordre:% s
HVOR
ordredato MELLEM '2022-01-01' OG '2022-12-31'
OG order_status = 'fuldført'
GRUPPE EFTER
Kundenavn
AT HAVE
COUNT(ordre_id) > 5;

-- Få det gennemsnitlige ordrebeløb for hver kunde
VÆLG
Kundenavn,
AVG(ordre_beløb) SOM gennemsnits_ordre_beløb
FRA
Ordre:% s
HVOR
ordredato MELLEM '2022-01-01' OG '2022-12-31'
OG order_status = 'fuldført'
GRUPPE EFTER
Kundenavn
AT HAVE
COUNT(ordre_id) > 5;

-- Få det samlede salg for hver kunde
VÆLG
Kundenavn,
SUM(ordre_beløb) AS total_salg
FRA
Ordre:% s
HVOR
ordredato MELLEM '2022-01-01' OG '2022-12-31'
OG order_status = 'fuldført'
GRUPPE EFTER
Kundenavn
AT HAVE
COUNT(ordre_id) > 5
BESTIL EFTER
total_salg DESC;

Denne forenklede tilgang opdeler opgaverne med at få kundenavne og samlede ordrer, gennemsnitlige ordrebeløb og samlet salg for hver kunde i individuelle forespørgsler. Hver forespørgsel har bestemte formål og er optimeret til specifikke opgaver, hvilket gør det nemmere for databasen at behandle efter anmodning.

Tips til forenkling af forespørgsler

Når du forenkler forespørgsler, er det vigtigt at fokusere på én opgave pr. gang for at oprette forespørgsler, der er optimeret til den specifikke opgave. At fokusere på én opgave kan hjælpe med at forbedre ydeevnen betydeligt.

Det er også vigtigt at bruge gode navnekonventioner for at gøre koden nemmere at forstå og vedligeholde. Du kan nemt identificere potentielle problemer og forbedringsområder i systemet.

Forespørgselsoptimering gennem lagrede procedurer

Lagrede procedurer er sæt af forudskrevne SQL-sætninger gemt i en database. Du kan bruge lagrede procedurer til at udføre forskellige handlinger, fra opdatering til indsættelse eller hentning af data fra en database. Lagrede procedurer kan acceptere parametre. Du kan kalde dem fra forskellige programmeringssprog, hvilket gør dem til et kraftfuldt værktøj til applikationsudvikling.

Her er et eksempel på oprettelse af en lagret procedure for MSSQL, der returnerer den gennemsnitlige løn for medarbejdere i en afdeling:

SKABPROCEDURE [dbo].[GetAverageSalary]
@Afdelingsnavn VARCHAR(50)
SOM
BEGYNDE
VÆLGAVG(Løn) som Gennemsnitsløn
FRA Medarbejdere
WHERE Afdeling = @Afdelingsnavn
ENDE

I den lagrede procedure definerede du en parameter kaldet @Afdelingsnavn og brugte HVOR klausul for at filtrere resultaterne efter afdelingen. Du brugte også AVG funktion til at beregne gennemsnitslønnen for medarbejdere i afdelingen.

Du kan udføre lagrede procedurer i MSSQL med EXEC udmelding.

Sådan kan du udføre den lagrede procedure ovenfor:

EXEC [dbo].[GetAverageSalary] @DepartmentName = 'Salg'

I erklæringen om udførelse af lagrede procedurer passerer du Salg værdi som afdelingens navn. Opgørelsen vil returnere den gennemsnitlige medarbejderløn i salgsafdelingen.

Hvordan forbedrer lagrede procedurer forespørgselsydeevne?

Lagrede procedurer kan forbedre forespørgselsydeevnen betydeligt. For det første reducerer lagrede procedurer netværkstrafik ved at udføre SQL-sætningerne på serversiden i stedet for at overføre data frem og tilbage mellem klienten og serveren, hvilket reducerer mængden af ​​data, der sendes over netværket og reducerer forespørgselssvar tid.

For det andet kan du kompilere lagrede cacheprocedurer, hvilket betyder at gemme eksekveringsplanen i hukommelsen. Når du kalder den lagrede procedure, henter serveren udførelsesplanen fra hukommelsen i stedet for at genkompilere SQL-sætningerne, hvilket reducerer udførelsestiden for den lagrede procedure og forbedrer forespørgslen ydeevne.

Du kan konfigurere MSSQL på Ubuntu

MSSQL har gjort betydelige fremskridt med at understøtte Ubuntu og andre Linux-distributioner. Microsoft anerkendte den voksende popularitet af Linux i virksomheden og besluttede at udvide tilgængeligheden af ​​deres flagskibsdatabaseserver til Linux-platforme.