Introductie

De queryprestaties verbeteren in SQL Server

Dean Smith

Founder, Atamai Analytics

Aardbevingen-database

Aardbevingen-database

De queryprestaties verbeteren in SQL Server

Database NBA-seizoen 2017-2018

Database NBA-seizoen 2017-2018

De queryprestaties verbeteren in SQL Server

Database klantbestellingen

Database klantbestellingen

De queryprestaties verbeteren in SQL Server

Is dit makkelijk te lezen?

Select ps.Team, count(p.PlayerName) 
As NonNthAmerPlayers from 
 PlayerStats ps inner 
join (select PlayerName FROM Players 
    WHERE Country <> 'USA' Or Country 
 <> 'Canada' ) 
 p on p.PlayerName = ps.PlayerName 
 group BY ps.Team
having Count(p.PlayerName) 
>=24 Order by NonNthAmerPlayers desc
Team NonNthAmerPlayers
HOU 24
LAL 24
MEM 24
MIL 24
De queryprestaties verbeteren in SQL Server

Suggesties

  • Wees consistent
  • Gebruik HOOFDLETTERS voor alle SQL-syntax
  • Nieuwe regel per hoofdonderdeel: SELECT, FROM, WHERE, enz.
  • Inspringen:
    • Subquery’s
    • ON-regels
    • AND/OR-voorwaarden
    • Voorkom lange regels, bv. meerdere kolomnamen
  • Sluit de query af met een puntkomma (;)
  • Alias waar nodig met AS
De queryprestaties verbeteren in SQL Server

Veel beter...

Van

Select ps.Team, count(p.PlayerName) 
As NonNthAmerPlayers from 
 PlayerStats ps inner 
join (select PlayerName FROM Players 
    WHERE Country <> 'USA' Or Country 
 <> 'Canada' ) 
 p on p.PlayerName = ps.PlayerName 
 group BY ps.Team
having Count(p.PlayerName) 
>=24 Order by NonNthAmerPlayers desc

Naar

SELECT ps.Team, 
    COUNT(p.PlayerName) NonNthAmerPlayers
FROM PlayerStats ps
INNER JOIN
        (SELECT PlayerName 
         FROM Players 
         WHERE Country <> 'USA'
                OR Country <> 'Canada' ) p
    ON p.PlayerName = ps.PlayerName
GROUP BY ps.Team
HAVING COUNT(p.PlayerName) >=24
ORDER BY NonNthAmerPlayers DESC;
De queryprestaties verbeteren in SQL Server

Blokken commentariëren

/* 
Geeft een lijst van NBA-teams met 24 of meer niet-Noord-
Amerikaanse spelers op de roster.
*/

SELECT ps.Team, COUNT(p.PlayerName) NonNthAmerPlayers FROM PlayerStats ps INNER JOIN (SELECT PlayerName FROM Players WHERE Country <> 'USA' OR Country <> 'Canada' ) p ON p.PlayerName = ps.PlayerName GROUP BY ps.Team HAVING COUNT(p.PlayerName) >=24 ORDER BY NonNthAmerPlayers DESC;

Gebruik /* en */ om een blok code of tekst te commentariëren

De queryprestaties verbeteren in SQL Server

Blokken commentariëren

/* 
Geeft een lijst van NBA-teams met 24 of meer niet-Noord-
Amerikaanse spelers op de roster.
*/

SELECT ps.Team, COUNT(p.PlayerName) NonNthAmerPlayers FROM PlayerStats ps INNER JOIN (SELECT PlayerName FROM Players WHERE Country <> 'USA' OR Country <> 'Canada' ) p ON p.PlayerName = ps.PlayerName GROUP BY ps.Team HAVING COUNT(p.PlayerName) >=24 ORDER BY NonNthAmerPlayers DESC;

Gebruik /* en */ om een blok code of tekst te commentariëren

Team NonNthAmerPlayers
HOU 24
LAL 24
MEM 24
MIL 24
De queryprestaties verbeteren in SQL Server

Regels commentariëren

Gebruik -- om één regel code of tekst te commentariëren

SELECT ps.Team, 
  COUNT(p.PlayerName) NonNthAmerPlayers
FROM PlayerStats ps

INNER JOIN 
    (SELECT PlayerName 
     FROM Players 
     WHERE Country <> 'USA'
        OR Country <> 'Canada' ) p
    ON p.PlayerName = ps.PlayerName
GROUP BY ps.Team
HAVING COUNT(p.PlayerName) >=24

ORDER BY NonNthAmerPlayers DESC;
De queryprestaties verbeteren in SQL Server

Regels commentariëren

Gebruik -- om één regel code of tekst te commentariëren

SELECT ps.Team, 
  COUNT(p.PlayerName) NonNthAmerPlayers -- Aantal spelers
FROM PlayerStats ps

INNER JOIN 
    (SELECT PlayerName 
     FROM Players 
     WHERE Country <> 'USA'
        OR Country <> 'Canada' ) p -- Ingesprongen subquery
    ON p.PlayerName = ps.PlayerName
GROUP BY ps.Team
HAVING COUNT(p.PlayerName) >=24

ORDER BY NonNthAmerPlayers DESC;

 

  • Commentaar dat de nieuwe kolom het aantal spelers is

 

  • Commentaar dat de subquery is ingesprongen
De queryprestaties verbeteren in SQL Server

Regels commentariëren

Gebruik -- om één regel code of tekst te commentariëren

SELECT ps.Team, 
  COUNT(p.PlayerName) NonNthAmerPlayers -- Aantal spelers
FROM PlayerStats ps
-- Inner join start hier
INNER JOIN 
    (SELECT PlayerName 
     FROM Players 
     WHERE Country <> 'USA'
        OR Country <> 'Canada' ) p -- Ingesprongen subquery
    ON p.PlayerName = ps.PlayerName
GROUP BY ps.Team
HAVING COUNT(p.PlayerName) >=24
-- Verwijder ORDER BY, niet vereist
ORDER BY NonNthAmerPlayers DESC;

 

 

  • Commentaar dat een scheiding vóór INNER JOIN markeert

 

 

  • Commentaar over de noodzaak van ORDER BY
De queryprestaties verbeteren in SQL Server

Regels commentariëren

Gebruik -- om één regel code of tekst te commentariëren

SELECT ps.Team, 
  COUNT(p.PlayerName) NonNthAmerPlayers -- Aantal spelers
FROM PlayerStats ps
-- Inner join start hier
INNER JOIN 
    (SELECT PlayerName 
     FROM Players 
     WHERE Country <> 'USA'
        OR Country <> 'Canada' ) p -- Ingesprongen subquery
    ON p.PlayerName = ps.PlayerName
GROUP BY ps.Team
HAVING COUNT(p.PlayerName) >=24;
-- Verwijder ORDER BY, niet vereist
-- ORDER BY NonNthAmerPlayers DESC

 

 

 

 

 

 

  • ORDER BY-regel is uitgecommentarieerd
De queryprestaties verbeteren in SQL Server

Laten we oefenen!

De queryprestaties verbeteren in SQL Server

Preparing Video For Download...