sql >> Database teknologi >  >> RDS >> Database

9 bedste fremgangsmåder til at skrive SQL-forespørgsler

Hvis du læser denne artikel, er du sandsynligvis allerede bekendt med SQL. Du ved, hvordan man skriver grundlæggende SQL-forespørgsler. Der er mange måder at udføre en SQL-forespørgsel på for at få de ønskede resultater på din database.

Det er dog ikke alle SQL-forespørgsler, der er skabt lige. De fleste kan optimeres til at følge SQL-forespørgslernes bedste praksis. Denne artikel fokuserer på 9 tips til optimering af SQL-forespørgsler. Efter at have læst, vil du kende alle dos and don'ts ved at skrive SQL-forespørgsler.

1. Undgå brugen af ​​SELECT Asterisk (SELECT *)

Dette er en af ​​de vigtigste SQL best practices. SELECT *-forespørgslen returnerer poster fra alle kolonner i tabellen. Selvom det er nyttigt i nogle tilfælde, giver denne forespørgsel ofte adskillige komplikationer:

  • Du behøver muligvis ikke at hente alle kolonnerne. Men SELECT * returnerer dem alle og bruger for stor båndbredde til at udføre en forespørgsel over netværket.
  • Kolonnenavne i en tabel kan ændres eller fjernes, og nye kolonner kan tilføjes. Du kan således modtage uventede resultater for SELECT *-forespørgslen. Det er en bedre idé at angive kolonnenavne.
  • SELECT * er langsommere end SELECT Column Names, fordi sidstnævnte kan bruge kolonneindekser til at returnere data.
  • Rækkefølgen af ​​kolonner returneret af SELECT * er ikke i din kontrol. Du definerer dog den ønskede rækkefølge, når du angiver kolonnenavnene.

2. Brug WHERE og HAVING-klausulen nøjagtigt

WHERE- og HAVING-sætningerne i SQL har forskellige funktionaliteter. Derfor bør vi bruge dem anderledes. De tre hovedanvendelser af WHERE og HAVING er nedenfor:

  • WHERE kan bruges med CRUD-forespørgsler, dvs. SELECT, INSERT, UPDATE, DELETE. På den anden side kan du kun bruge HAVING med SELECT-sætningen.
  • WHERE filtrerer data før enhver aggregeringshandling såsom GROUP BY. Så kan den bruges uden nogen aggregeringsfunktion. HAVING bør bruges efter aggregering.
  • Vi kan bruge aggregeringsfunktionerne, såsom SUM, MIN, MAX COUNT med HAVING-sætningen. Med WHERE-sætningen kan vi ikke bruge aggregeringsfunktioner, medmindre denne sætning er en del af en underforespørgsel indeholdt i HAVING-sætningen.

3. Brug INNER JOIN-forespørgsel i stedet for WHERE-klausulen til at forbinde tabeller

JOIN-forespørgslen er sandsynligvis en af ​​de mest nyttige SQL-forespørgsler. Det giver dig mulighed for at VÆLGE data fra flere tabeller. Selvom du kan bruge WHERE-sætningen til at få aggregerede data fra to tabeller, er WHERE-sætningen meget ineffektiv.

WHERE-sætningen returnerer CROSS JOIN, som er et kartesisk produkt af poster i begge kolonner. For eksempel, hvis du har 1.000 poster i tabel A og det samme antal poster i tabel B, vil WHERE-udtrykket oprette en CROSS JOIN med 1.000 x 1.000 =1.000.000 poster.

Hvis kolonnerne i tabel A og B involveret i WHERE-udtrykket kun har 1.000 fælles værdier, vil WHERE-udtrykket returnere 1.000 poster fra de oprindelige 1.000.000 poster, der er oprettet af det kartesiske produkt.

INNER JOIN-sætningen returnerer kun 1.000 poster, hvor både tabel A og B har fælles værdier i kolonnerne. I dette tilfælde har INNER JOIN 1.000 gange mindre arbejde end WHERE-klausulen.

Nogle databaser konverterer WHERE-sætningen i JOIN-forespørgslen til INNER JOIN-sætningen bag scenen. Det anbefales dog altid, at du bruger INNER JOIN eksplicit i stedet for WHERE-klausulen for at følge bedste praksis for SQL-kodning.

4. Brug EXISTS, NOT EXISTS i stedet for IN og NOT IN i SQL

Brug altid EXIST over IN-sætningen, hvis du vil bekræfte eksistensen af ​​en værdi i en bestemt tabel.

Processen, der udfører EXISTS-udtrykket, stopper, så snart den finder den nødvendige værdi i tabellen. På den anden side scanner IN-forespørgslen alt selv efter at have fundet den nødvendige værdi.

På samme måde bør du altid bruge IKKE FINDER i stedet for IKKE I, når du søger efter den værdi, der ikke findes i en tabel.

5. Brug Equals Operator (=) i stedet for LIKE Operator i SQL

Du kan bruge både =- og LIKE-operatorerne til at matche strenge. Den største forskel mellem de to er, at LIKE-operatoren bruges til at matche jokertegn såsom % til at søge efter delvise strenge, hvorimod lig-operatoren "=" søger efter eksakte matches.

Hvis du skal vælge mellem de to, skal du altid foretrække lige-operatoren ("="), da den gør brug af indekserede kolonner. Derfor er den hurtigere end LIKE-klausulen.

6. Brug LIMIT-klausulen til at reducere søgeresultater

Hvis du skal returnere data fra flere tabeller eller kolonner, skal du bruge LIMIT-udtrykket (også kendt som TOP-udtrykket) til at reducere forespørgselsresultater. Hvis der er tusindvis af kolonner, eller du kun vil se, hvordan dataene ser ud i dine tabeller, er det ikke nødvendigt at returnere alle rækker. Begræns i stedet antallet af rækker, der returneres af SELECT-forespørgslen ved hjælp af LIMIT-sætningen i forbindelse med den.

7. Brug tabelaliaser, når du forespørger efter flere tabeller

For at undgå forvirring og forhindre databaser i at analysere kolonnenavne, når de søger efter den tabel, de tilhører, skal du altid bruge tabelaliasser.

Du skal allerede bruge tabelnavne/aliasser, hvis du har de samme kolonnenavne i flere tabeller, så dette vil ikke øge din arbejdsbyrde.

8. Undgå at forudsætte lagrede procedurer med "sp_"

Hvis du arbejdede med lagrede procedurer, så har du højst sandsynligt forudsat navnet på den lagrede procedure med "sp_". Dette er ikke det bedste.

SQL Server starter med at lede efter lagrede procedurer med "sp_" i begyndelsen af ​​deres navne i masterdatabasen, før du fortsætter med at søge andre steder.

Derfor kan du spare masser af tid ved ikke at sætte "sp_" foran lagrede procedurer. Så, i stedet for at forsøge at finde den lagrede procedure i masterdatabasen, vil SQL-serveren direkte tjekke dbo som ejer af den lagrede procedure.

9. Brug god forespørgselsskrivning

Det er vigtigt at følge bedste praksis for SQL-forespørgsler, f.eks. god stylingspraksis, når du skriver SQL-forespørgsler. Vær opmærksom på nedenstående anbefalinger for at forbedre din skrivestil for forespørgsler:

  • Tilføj altid kommentarer til SQL-forespørgsler. Kommentarer vil ikke kun hjælpe andre teammedlemmer til at forstå dine forespørgsler bedre, men også minde dig om, hvad du selv lavede tidligere.
  • Brug indlysende navnekonventioner. Databasen, tabellerne, kolonnenavne, midlertidige tabeller og andre variabelnavne skal være 100 % læsbare og klare.
  • Indryk dine forespørgsler, når det er muligt. Indre forespørgsler skal indrykkes en fane fra venstre. Kolonnenavne og -typer inde i en tabel skal også være indrykket. Indrykning sikrer et renere udseende og forbedrer læsbarheden af ​​forespørgsler, som afspejles i SQL Servers bedste praksis for forespørgsler.

Konklusion

SQL er et meget fleksibelt sprog, der giver adskillige måder at udføre ønskede opgaver på en database. For at gøre dine applikationer mere effektive og produktive og undgå langsigtede databaseproblemer, skal du anvende moderne SQL-forespørgselsoptimeringsmetoder til at skrive dine forespørgsler. Disse metoder hjælper dig med at fremskynde justering af ydeevne i SQL, eliminere unødvendige rutiner og gøre alt dit arbejde mere kortfattet og gennemsigtigt.

Læs også

22 smarte SQL-indekseksempler til at fordreje dine forespørgsler


  1. Hvordan kan jeg bruge en forespørgsel med pladsholder inde i anførselstegn? (perl / postgresql)

  2. Er det en dårlig idé at have et 'ELLER' i en INNER JOIN-tilstand?

  3. Oprettelse af en PostgreSQL-bruger og tilføjelse af dem til en database

  4. ORA-06502:PL/SQL:numerisk eller værdifejl:tegnstrengbuffer for lille