Om du läser den här artikeln är du förmodligen redan bekant med SQL. Du vet hur man skriver grundläggande SQL-frågor. Det finns många sätt att köra en SQL-fråga för att få önskade resultat i din databas.
Men alla SQL-frågor skapas inte lika. De flesta kan optimeras för att följa SQL-frågans bästa praxis. Den här artikeln fokuserar på 9 tips för optimering av SQL-frågor. Efter att ha läst kommer du att känna till alla bör- och inte-måter för att skriva SQL-frågor.
1. Undvik användningen av SELECT Asterisk (SELECT *)
Detta är en av de viktigaste bästa SQL-metoderna. SELECT *-frågan returnerar poster från alla kolumner i tabellen. Även om den här frågan är till hjälp i vissa fall, orsakar den ofta många komplikationer:
- Du kanske inte behöver hämta alla kolumner. Men SELECT * returnerar dem alla och förbrukar överdriven bandbredd för att utföra en fråga över nätverket.
- Kolumnnamn i en tabell kan ändras eller tas bort, och nya kolumner kan läggas till. Därför kan du få oväntade resultat för SELECT *-frågan. Att ange kolumnnamn är en bättre idé.
- SELECT * är långsammare än SELECT kolumnnamn eftersom de senare kan använda kolumnindex för att returnera data.
- Orden på kolumner som returneras av SELECT * är inte i din kontroll. Du definierar dock önskad ordning när du anger kolumnnamnen.
2. Använd WHERE och HAVING-klausulen korrekt
WHERE- och HAVING-satserna i SQL har olika funktioner. Därför bör vi använda dem annorlunda. De tre huvudsakliga användningsfallen av WHERE och HAVING är nedan:
- WHERE kan användas med CRUD-frågor, t.ex. SELECT, INSERT, UPDATE, DELETE. Å andra sidan kan du bara använda HAVING med SELECT-satsen.
- WHERE filtrerar data före någon aggregeringsoperation som GROUP BY. Då kan den användas utan någon aggregationsfunktion. HAVING ska användas efter aggregering.
- Vi kan använda aggregeringsfunktionerna, som SUM, MIN, MAX COUNT med HAVING-satsen. Med WHERE-satsen kan vi inte använda aggregeringsfunktioner, såvida inte denna sats är en del av en underfråga som ingår i HAVING-satsen.
3. Använd INNER JOIN-fråga istället för WHERE-satsen för att gå med i tabeller
JOIN-frågan är förmodligen en av de mest användbara SQL-frågorna. Det låter dig VÄLJA data från flera tabeller. Även om du kan använda WHERE-satsen för att hämta aggregerad data från två tabeller, är WHERE-satsen mycket ineffektiv.
WHERE-satsen returnerar CROSS JOIN som är en kartesisk produkt av poster i båda kolumnerna. Om du till exempel har 1 000 poster i tabell A och samma antal poster i tabell B, skapar WHERE-satsen en CROSS JOIN med 1 000 x 1 000 =1 000 000 poster.
Om kolumnerna i tabellerna A och B som är involverade i WHERE-satsen bara har 1 000 gemensamma värden, returnerar WHERE-satsen 1 000 poster från de initiala 1 000 000 poster som skapats av den kartesiska produkten.
INNER JOIN-satsen returnerar endast 1 000 poster där både tabellerna A och B har gemensamma värden i kolumnerna. I det här fallet har INNER JOIN 1 000 gånger mindre arbete än WHERE-satsen.
Vissa databaser konverterar WHERE-satsen i JOIN-frågan till INNER JOIN-satsen bakom scenen. Det rekommenderas dock alltid att du använder INNER JOIN uttryckligen istället för WHERE-satsen för att följa bästa metoder för SQL-kodning.
4. Använd EXISTS, NOT EXISTS istället för IN och NOT IN i SQL
Använd alltid EXIST över IN-satsen om du vill bekräfta att det finns ett värde i en viss tabell.
Processen som exekverar EXISTS-satsen slutar så snart den hittar det önskade värdet i tabellen. Å andra sidan skannar IN-frågan allt även efter att ha hittat det nödvändiga värdet.
På samma sätt bör du alltid använda NOT EXISTS istället för NOT IN när du söker efter värdet som inte finns i en tabell.
5. Använd Equals Operator (=) istället för GILLA Operatör i SQL
Du kan använda både =- och LIKE-operatorerna för att matcha strängar. Den största skillnaden mellan de två är att LIKE-operatorn används för att matcha jokertecken som % för att söka efter partiella strängar, medan lika-operatorn "=" letar efter exakta matchningar.
Om du måste välja mellan de två, föredra alltid lika-operatorn (“=”), eftersom den använder sig av indexerade kolumner. Därför är den snabbare än LIKE-satsen.
6. Använd LIMIT-satsen för att minska sökresultaten
Om du måste returnera data från flera tabeller eller kolumner, använd LIMIT-satsen (även känd som TOP-satsen) för att minska frågeresultaten. Om det finns tusentals kolumner, eller om du bara vill se hur data ser ut i dina tabeller, är det inte nödvändigt att returnera alla rader. Begränsa istället antalet rader som returneras av SELECT-frågan med hjälp av LIMIT-satsen i samband med den.
7. Använd tabellalias när du frågar efter flera tabeller
För att undvika förvirring och förhindra att databaser tolkar kolumnnamn när de söker efter tabellen de tillhör, använd alltid tabellalias.
Du måste redan använda tabellnamn/alias om du har samma kolumnnamn i flera tabeller, så detta kommer inte att öka din arbetsbelastning.
8. Undvik att prefixa lagrade procedurer med "sp_"
Om du arbetade med lagrade procedurer, så har du troligen prefixet det lagrade procedurens namn med "sp_". Det här är inte det bästa.
SQL Server börjar med att leta efter lagrade procedurer med "sp_" i början av deras namn i huvuddatabasen innan du fortsätter att söka någon annanstans.
Därför kan du spara mycket tid genom att inte prefixa lagrade procedurer med "sp_" Sedan, istället för att försöka hitta den lagrade proceduren i huvuddatabasen, kommer SQL-servern direkt att kontrollera dbo som ägare till den lagrade proceduren.
9. Använd bra stil för att skriva frågor
Det är viktigt att följa bästa praxis för SQL-frågor, som bra stilpraxis när du skriver SQL-frågor. Var uppmärksam på nedanstående rekommendationer för att förbättra din frågas skrivstil:
- Lägg alltid till kommentarer till SQL-frågor. Kommentarer hjälper inte bara andra teammedlemmar att förstå dina frågor bättre utan också påminna dig om vad du själv gjorde tidigare.
- Använd uppenbara namnkonventioner. Databasen, tabellerna, kolumnnamnen, temporära tabellerna och andra variabelnamn ska vara 100 % läsbara och tydliga.
- Pryck in dina frågor när det är möjligt. Inre frågor måste dras in en flik från vänster. Kolumnnamn och -typer i en tabell bör också dras in. Indrag säkerställer ett renare utseende och förbättrar läsbarheten för frågor som återspeglas i SQL Servers bästa praxis för frågor.
Slutsats
SQL är ett mycket flexibelt språk som ger många sätt att utföra önskade uppgifter i en databas. För att göra dina applikationer mer effektiva och produktiva och undvika långsiktiga databasproblem, använd moderna bästa metoder för SQL-frågeoptimering för att skriva dina frågor. Dessa metoder hjälper dig att påskynda prestandajusteringen i SQL, eliminera onödiga rutiner och göra allt ditt arbete mer kortfattat och transparent.
Läs också
22 fiffiga SQL-indexexempel för att förvränga dina frågor