Øk ytelsen til SQL-spørringer med MSSQL. Lær hvordan du kan optimalisere søkene dine for effektivitet og hastighet i denne informative veiledningen.

Uoptimalisert Microsoft SQL Server (MSSQL) SQL-spørringer kan resultere i dårlig ytelse, ressursoverbruk, inkonsekvente data, sikkerhetsfeil og vedlikeholdsproblemer. Disse problemene kan påvirke programmets funksjonalitet, pålitelighet og sikkerhet, noe som kan frustrere brukere og koste deg mer penger.

Optimalisering av SQL-spørringer i MSSQL er avgjørende for å oppnå effektiv og rask ytelse. Ved å implementere teknikker som indeksering, spørringsforenkling og lagringsprosedyrer kan brukere balansere søkeytelse og datamodifikasjonsytelse, og til slutt forbedre den generelle databasen opptreden.

Spørringsoptimalisering gjennom indeksering

Databaseindeksering organiserer og sorterer data i databasetabeller for å gjøre søket raskere og mer effektivt. Indeksering lager kopier av data i tabeller og sorterer dem slik at databasemotor kan enkelt navigere i dem.

instagram viewer

Ved kjøring av spørringer bruker databasemotoren indeksen for å finne de nødvendige dataene og returnerer raskt resultater, og påskynder dermed utføringstiden for spørringer. Uten indeksering må databasemotoren skanne alle rader i tabellen for å finne de nødvendige dataene, og dette kan være tids- og ressurskrevende, spesielt for store tabeller.

Opprette en indeks i MSSQL

Det er enkelt å lage en indeks i relasjonsdatabaser, og MSSQL blir ikke oversett. Du kan bruke LAG INDEKS setning for å lage en indeks i MSSQL.

SKAPEINDEKS indeksnavn
PÅ tabellnavn (kolonne1, kolonne2, ...);

I SQL-koden ovenfor, indeksnavn er navnet på indeksen, tabellnavn er tabellens navn, og kolonne 1, kolonne 2, og så videre er navnene på kolonnene som skal indekseres.

Slik lager du en ikke-klynget indeks på en Kunder bordets Etternavn kolonne med en SQL-setning.

SKAPE IKKE-KLUSTERET INDEKS IX_Customers_LastName
ON-kunder (Etternavn);

Utsagnet oppretter en ikke-klynget indeks kalt IX_Customers_LastNameEtternavn kolonne av Kunder bord.

Kostnaden for indeksering

Selv om indeksering kan forbedre søkeytelsen betydelig, har det en kostnad. Indeksering krever ekstra diskplass for å lagre indeksen, og indekseringsoperasjoner kan redusere datamodifikasjonsoperasjoner som innsettinger, oppdateringer og slettinger. Du må oppdatere indeksen ved dataendring, og oppdateringsoperasjonen kan være tidkrevende for store tabeller.

Derfor er det viktig å balansere søkeytelse og datamodifikasjonsytelse. Du bør bare opprette indekser for kolonner som du søker ofte etter. Det er også viktig å regelmessig overvåke indeksressursbruk og fjerne unødvendige indekser.

Spørringsoptimalisering gjennom spørringsforenkling

For dataanalyse kommer komplekse søk godt med for datautvinning. Imidlertid har komplekse søk en innvirkning på ytelsen, og de kan føre til ineffektiv datautvinning.

Å forenkle spørringer innebærer å bryte ned komplekse spørringer i mindre, enklere for raskere, mindre ressurskrevende behandling.

Spørringsforenkling forbedrer ytelsen og gjør datautvinning enklere ved å dele komplekse spørringer i enklere spørringer siden komplekse spørringer kan forårsake flaskehalser i systemet. De er vanskelige å forstå, noe som gjør det vanskeligere for utviklere og analytikere å feilsøke problemer eller identifisere områder for optimalisering.

Her er et eksempel på en kompleks spørring som kjører på MSSQL for en tabell over kundeordrer der målet er å identifisere trender og mønstre i dataene:

PLUKKE UT
Kundenavn,
COUNT(ordre_id) AS total_orders,
AVG(ordre_amount) AS average_order_amount,
SUM(ordre_beløp) AS totalt_salg
FRA
bestillinger
HVOR
order_date MELLOM '2022-01-01' OG '2022-12-31'
OG order_status = 'fullført'
GRUPPE AV
Kundenavn
HA
COUNT(ordre_id) > 5
REKKEFØLGE ETTER
total_salg DESC;

Spørringen søker etter kundenavn og salgsinformasjon fra fullførte bestillinger i 2022, mens kunder med færre enn fem bestillinger filtreres etter totalt salg i synkende rekkefølge.

Spørringen kan gi verdifull innsikt, men den er kompleks og vil til slutt ta lengre tid å behandle, spesielt hvis bestillinger tabellen har mange oppføringer.

Du kan forenkle spørringen ved å dele opp spørringen i mindre spørringer som kjøres ett om gangen.

-- Få en liste over kundenavn og totalt antall bestillinger de har lagt inn
PLUKKE UT
Kundenavn,
COUNT(ordre_id) AS total_orders
FRA
bestillinger
HVOR
order_date MELLOM '2022-01-01' OG '2022-12-31'
OG order_status = 'fullført'
GRUPPE AV
Kundenavn
HA
COUNT(ordre_id) > 5;

-- Få gjennomsnittlig ordrebeløp for hver kunde
PLUKKE UT
Kundenavn,
AVG(ordre_amount) AS average_order_amount
FRA
bestillinger
HVOR
order_date MELLOM '2022-01-01' OG '2022-12-31'
OG order_status = 'fullført'
GRUPPE AV
Kundenavn
HA
COUNT(ordre_id) > 5;

-- Få det totale salget for hver kunde
PLUKKE UT
Kundenavn,
SUM(ordre_beløp) AS totalt_salg
FRA
bestillinger
HVOR
order_date MELLOM '2022-01-01' OG '2022-12-31'
OG order_status = 'fullført'
GRUPPE AV
Kundenavn
HA
COUNT(ordre_id) > 5
REKKEFØLGE ETTER
total_salg DESC;

Denne forenklede tilnærmingen skiller oppgavene med å få kundenavn og totale bestillinger, gjennomsnittlige ordrebeløp og totalt salg for hver kunde i individuelle forespørsler. Hver spørring har bestemte formål og er optimalisert for spesifikke oppgaver, noe som gjør det enklere for databasen å behandle på forespørsel.

Tips for forenkling av spørringer

Når du forenkler spørringer, er det viktig å fokusere på én oppgave per gang for å lage spørringer som er optimalisert for den spesifikke oppgaven. Å fokusere på én oppgave kan bidra til å forbedre ytelsen betraktelig.

Det er også viktig å bruke gode navnekonvensjoner for å gjøre koden enklere å forstå og vedlikeholde. Du kan enkelt identifisere potensielle problemer og forbedringsområder i systemet.

Spørringsoptimalisering gjennom lagrede prosedyrer

Lagrede prosedyrer er sett med forhåndsskrevne SQL-setninger lagret i en database. Du kan bruke lagrede prosedyrer til å utføre ulike operasjoner, fra å oppdatere til å sette inn eller hente data fra en database. Lagrede prosedyrer kan godta parametere. Du kan ringe dem fra forskjellige programmeringsspråk, noe som gjør dem til et kraftig verktøy for applikasjonsutvikling.

Her er et eksempel på å lage en lagret prosedyre for MSSQL som returnerer gjennomsnittslønnen til ansatte i en avdeling:

SKAPEFREMGANGSMÅTE [dbo].[GetAverageSalary]
@DepartmentName VARCHAR(50)
SOM
BEGYNNE
PLUKKE UTAVG(Lønn) som Gjennomsnittlig lønn
FRA ansatte
WHERE Avdeling = @DepartmentName
SLUTT

I den lagrede prosedyren definerte du en parameter kalt @Avdelingsnavn og brukte HVOR klausul for å filtrere resultatene etter avdelingen. Du brukte også AVG funksjon for å beregne gjennomsnittslønnen til ansatte i avdelingen.

Du kan utføre lagrede prosedyrer i MSSQL med EXEC uttalelse.

Slik kan du utføre den lagrede prosedyren ovenfor:

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

I utførelsessetningen for lagret prosedyre passerer du Salg verdi som avdelingsnavn. Oppgaven vil returnere gjennomsnittlig ansattes lønn i salgsavdelingen.

Hvordan lagrede prosedyrer forbedrer søkeytelsen?

Lagrede prosedyrer kan forbedre søkeytelsen betydelig. For det første reduserer lagrede prosedyrer nettverkstrafikk ved å utføre SQL-setningene på serversiden i stedet for å overføre data frem og tilbake mellom klienten og serveren, og reduserer dermed mengden data som sendes over nettverket og reduserer spørringsresponsen tid.

For det andre kan du kompilere lagrede caching-prosedyrer, som betyr å lagre utførelsesplanen i minnet. Når du kaller den lagrede prosedyren, henter serveren utførelsesplanen fra minnet i stedet for å rekompilere SQL-setningene, og dermed redusere utførelsestiden for den lagrede prosedyren og forbedre spørringen opptreden.

Du kan sette opp MSSQL på Ubuntu

MSSQL har gjort betydelige fremskritt med å støtte Ubuntu og andre Linux-distribusjoner. Microsoft anerkjente den økende populariteten til Linux i bedriften og bestemte seg for å utvide tilgjengeligheten av deres flaggskipdatabaseserver til Linux-plattformer.