Öka prestanda för SQL-frågor med MSSQL. Lär dig hur du optimerar dina frågor för effektivitet och hastighet i den här informativa guiden.
Ooptimerad Microsoft SQL Server (MSSQL) SQL-frågor kan resultera i undermålig prestanda, överanvändning av resurser, inkonsekventa data, säkerhetsbrister och underhållssvårigheter. Dessa problem kan påverka ditt programs funktionalitet, pålitlighet och säkerhet, vilket kan frustrera användare och kosta dig mer pengar.
Att optimera SQL-frågor i MSSQL är avgörande för att uppnå effektiv och snabb prestanda. Genom att implementera tekniker som indexering, frågeförenkling och lagringsprocedurer kan användare balansera frågeprestanda och datamodifieringsprestanda, vilket i slutändan förbättrar den övergripande databasen prestanda.
Frågeoptimering genom indexering
Databasindexering organiserar och sorterar data i databastabeller för att göra sökningen snabbare och effektivare. Indexering skapar kopior av data i tabeller och sorterar dem så att databasmotor kan enkelt navigera i dem.
Vid exekvering av en fråga använder databasmotorn indexet för att hitta de data som krävs och returnerar snabbt resultat, vilket påskyndar exekveringstiden för frågor. Utan indexering måste databasmotorn skanna alla rader i tabellen för att hitta den data som krävs, och detta kan vara tids- och resurskrävande, särskilt för stora tabeller.
Skapa ett index i MSSQL
Att skapa ett index i relationsdatabaser är enkelt och MSSQL förbises inte. Du kan använda SKAPA INDEX uttalande för att skapa ett index i MSSQL.
SKAPAINDEX index_name
ON tabellnamn (kolumn1, kolumn2, ...);
I SQL-koden ovan, index_name är namnet på indexet, tabellnamn är tabellens namn, och kolumn 1, kolumn 2, och så vidare är namnen på kolumnerna som ska indexeras.
Så här skapar du ett icke-klustrat index på en Kunder bordets Efternamn kolumn med en SQL-sats.
SKAPA ICLUSTERAD INDEX IX_Customers_LastName
ON-kunder (efternamn);
Uttrycket skapar ett icke-klustrat index som kallas IX_Customers_LastName på Efternamn kolumn av Kunder tabell.
Kostnaden för indexering
Även om indexering avsevärt kan förbättra frågeprestanda, har det en kostnad. Indexering kräver ytterligare diskutrymme för att lagra indexet, och indexeringsåtgärder kan sakta ner datamodifieringsoperationer såsom infogning, uppdatering och borttagning. Du måste uppdatera indexet vid dataändring, och uppdateringsoperationen kan vara tidskrävande för stora tabeller.
Därför är det viktigt att balansera frågeprestanda och datamodifieringsprestanda. Du bör bara skapa index på kolumner som du söker ofta. Det är också viktigt att regelbundet övervaka indexresursanvändningen och ta bort onödiga index.
Frågeoptimering genom frågeförenkling
För dataanalys kommer komplexa frågor väl till pass för dataextraktion. Komplexa frågor har dock en inverkan på prestanda och de kan resultera i ineffektiv dataextraktion.
Att förenkla frågor innebär att dela upp komplexa frågor i mindre, enklare för snabbare, mindre resurskrävande bearbetning.
Frågeförenkling förbättrar prestandan och gör datautvinning enklare genom att dela upp komplexa frågor i enklare frågor eftersom komplexa frågor kan orsaka flaskhalsar i systemet. De är svåra att förstå, vilket gör det svårare för utvecklare och analytiker att felsöka problem eller identifiera områden för optimering.
Här är ett exempel på en komplex fråga som körs på MSSQL för en tabell över kundorder där målet är att identifiera trender och mönster i data:
VÄLJ
Köparens namn,
COUNT(order_id) AS total_orders,
AVG(orderbelopp) AS medelorderbelopp,
SUM(orderbelopp) AS total_sales
FRÅN
order
VAR
order_date MELLAN '2022-01-01' OCH '2022-12-31'
AND order_status = 'avslutad'
GRUPP AV
Köparens namn
HAR
COUNT(order_id) > 5
SORTERA EFTER
total_sales DESC;
Frågan söker efter kundnamn och försäljningsinformation från slutförda beställningar 2022 samtidigt som kunder med färre än fem beställningar filtreras efter total försäljning i fallande ordning.
Frågan kan ge värdefulla insikter, men den är komplex och skulle så småningom ta längre tid att bearbeta, särskilt om order tabellen har många poster.
Du kan förenkla frågan genom att dela upp frågan i mindre frågor som körs en i taget.
-- Få en lista över kundnamn och det totala antalet beställningar de har gjort
VÄLJ
Köparens namn,
COUNT(order_id) AS total_orders
FRÅN
order
VAR
order_date MELLAN '2022-01-01' OCH '2022-12-31'
AND order_status = 'avslutad'
GRUPP AV
Köparens namn
HAR
COUNT(order_id) > 5;-- Få det genomsnittliga orderbeloppet för varje kund
VÄLJ
Köparens namn,
AVG(orderbelopp) SOM medelorderbelopp
FRÅN
order
VAR
order_date MELLAN '2022-01-01' OCH '2022-12-31'
AND order_status = 'avslutad'
GRUPP AV
Köparens namn
HAR
COUNT(order_id) > 5;
-- Få den totala försäljningen för varje kund
VÄLJ
Köparens namn,
SUM(orderbelopp) AS total_sales
FRÅN
order
VAR
order_date MELLAN '2022-01-01' OCH '2022-12-31'
AND order_status = 'avslutad'
GRUPP AV
Köparens namn
HAR
COUNT(order_id) > 5
SORTERA EFTER
total_sales DESC;
Detta förenklade tillvägagångssätt delar upp uppgifterna att få kundnamn och totala beställningar, genomsnittliga orderbelopp och total försäljning för varje kund i individuella frågor. Varje fråga har bestämda syften och är optimerad för specifika uppgifter, vilket gör det lättare för databasen att bearbeta på begäran.
Tips för att förenkla frågor
När du förenklar frågor är det viktigt att fokusera på en uppgift per gång för att skapa frågor som är optimerade för den specifika uppgiften. Att fokusera på en uppgift kan bidra till att förbättra prestandan avsevärt.
Det är också viktigt att använda bra namnkonventioner för att göra koden lättare att förstå och underhålla. Du kan enkelt identifiera potentiella problem och förbättringsområden i systemet.
Frågeoptimering genom lagrade procedurer
Lagrade procedurer är uppsättningar av förskrivna SQL-satser lagrade i en databas. Du kan använda lagrade procedurer för att utföra olika operationer, från att uppdatera till att infoga eller hämta data från en databas. Lagrade procedurer kan acceptera parametrar. Du kan ringa dem från olika programmeringsspråk, vilket gör dem till ett kraftfullt verktyg för applikationsutveckling.
Här är ett exempel på att skapa en lagrad procedur för MSSQL som returnerar medellönen för anställda på en avdelning:
SKAPAPROCEDUR [dbo].[GetAverageSalary]
@DepartmentName VARCHAR(50)
SOM
BÖRJA
VÄLJAVG(Lön) som Genomsnittslön
FRÅN Anställda
WHERE Department = @DepartmentName
SLUTET
I den lagrade proceduren definierade du en parameter som kallas @Avdelningsnamn och använde VAR klausul för att filtrera resultaten av avdelningen. Du använde också AVG funktion för att beräkna medellönen för anställda på avdelningen.
Du kan köra lagrade procedurer i MSSQL med EXEC påstående.
Så här kan du utföra den lagrade proceduren ovan:
EXEC [dbo].[GetAverageSalary] @DepartmentName = 'Försäljning'
I exekveringssatsen för lagrad procedur skickar du Försäljning värde som avdelningsnamn. Uttalandet kommer att returnera den genomsnittliga lönen för anställda på försäljningsavdelningen.
Hur lagrade procedurer förbättrar frågeprestanda?
Lagrade procedurer kan avsevärt förbättra frågeprestanda. För det första minskar lagrade procedurer nätverkstrafiken genom att exekvera SQL-satserna på serversidan snarare än att överföra data fram och tillbaka mellan klienten och servern, vilket minskar mängden data som skickas över nätverket och minskar frågesvar tid.
För det andra kan du kompilera lagrade cachingprocedurer, vilket innebär att du lagrar exekveringsplanen i minnet. När du anropar den lagrade proceduren hämtar servern exekveringsplanen från minnet istället för att kompilera om SQL-satserna, vilket minskar exekveringstiden för den lagrade proceduren och förbättrar frågan prestanda.
Du kan ställa in MSSQL på Ubuntu
MSSQL har gjort betydande framsteg när det gäller att stödja Ubuntu och andra Linux-distributioner. Microsoft insåg den växande populariteten för Linux i företaget och beslutade att utöka tillgängligheten för deras flaggskeppsdatabasserver till Linux-plattformar.