Introduction

Améliorer les performances des requêtes dans SQL Server

Dean Smith

Founder, Atamai Analytics

Base de données des séismes

Base de données des séismes

Améliorer les performances des requêtes dans SQL Server

Base de données NBA Saison 2017-2018

Base de données NBA Saison 2017-2018

Améliorer les performances des requêtes dans SQL Server

Base de données des commandes clients

Base de données des commandes clients

Améliorer les performances des requêtes dans SQL Server

Est-ce lisible ainsi ?

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
Améliorer les performances des requêtes dans SQL Server

Suggestions

  • Soyez cohérent
  • Mettez en MAJUSCULES toute la syntaxe SQL
  • Passez à la ligne pour chaque mot-clé principal : SELECT, FROM, WHERE, etc.
  • Indentez le code :
    • Sous-requêtes
    • Clauses ON
    • Conditions AND/OR
    • Pour éviter les lignes trop longues, p. ex. plusieurs noms de colonnes
  • Terminez la requête par un point-virgule (;)
  • Utilisez des alias si besoin, avec AS
Améliorer les performances des requêtes dans SQL Server

Beaucoup mieux...

Depuis

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

Vers

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;
Améliorer les performances des requêtes dans SQL Server

Commenter des blocs

/* 
Retourne la liste des équipes NBA avec 24 joueurs ou plus 
non nord-américains dans l'effectif.
*/

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;

Utilisez /* et */ pour commenter un bloc de code ou de texte

Améliorer les performances des requêtes dans SQL Server

Commenter des blocs

/* 
Retourne la liste des équipes NBA avec 24 joueurs ou plus 
non nord-américains dans l'effectif.
*/

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;

Utilisez /* et */ pour commenter un bloc de code ou de texte

Team NonNthAmerPlayers
HOU 24
LAL 24
MEM 24
MIL 24
Améliorer les performances des requêtes dans SQL Server

Commenter des lignes

Utilisez -- pour commenter une seule ligne de code ou de texte

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;
Améliorer les performances des requêtes dans SQL Server

Commenter des lignes

Utilisez -- pour commenter une seule ligne de code ou de texte

SELECT ps.Team, 
  COUNT(p.PlayerName) NonNthAmerPlayers -- Nombre de joueurs
FROM PlayerStats ps

INNER JOIN 
    (SELECT PlayerName 
     FROM Players 
     WHERE Country <> 'USA'
        OR Country <> 'Canada' ) p -- Sous-requête indentée
    ON p.PlayerName = ps.PlayerName
GROUP BY ps.Team
HAVING COUNT(p.PlayerName) >=24

ORDER BY NonNthAmerPlayers DESC;

 

  • Commentaire indiquant que la nouvelle colonne est un nombre de joueurs

 

  • Commentaire indiquant que la sous-requête est indentée
Améliorer les performances des requêtes dans SQL Server

Commenter des lignes

Utilisez -- pour commenter une seule ligne de code ou de texte

SELECT ps.Team, 
  COUNT(p.PlayerName) NonNthAmerPlayers -- Nombre de joueurs
FROM PlayerStats ps
-- L'INNER JOIN commence ici
INNER JOIN 
    (SELECT PlayerName 
     FROM Players 
     WHERE Country <> 'USA'
        OR Country <> 'Canada' ) p -- Sous-requête indentée
    ON p.PlayerName = ps.PlayerName
GROUP BY ps.Team
HAVING COUNT(p.PlayerName) >=24
-- Supprimez ORDER BY, il n'est pas requis
ORDER BY NonNthAmerPlayers DESC;

 

 

  • Commentaire marquant une coupure avant INNER JOIN

 

 

  • Commentaire sur le caractère requis de ORDER BY
Améliorer les performances des requêtes dans SQL Server

Commenter des lignes

Utilisez -- pour commenter une seule ligne de code ou de texte

SELECT ps.Team, 
  COUNT(p.PlayerName) NonNthAmerPlayers -- Nombre de joueurs
FROM PlayerStats ps
-- L'INNER JOIN commence ici
INNER JOIN 
    (SELECT PlayerName 
     FROM Players 
     WHERE Country <> 'USA'
        OR Country <> 'Canada' ) p -- Sous-requête indentée
    ON p.PlayerName = ps.PlayerName
GROUP BY ps.Team
HAVING COUNT(p.PlayerName) >=24;
-- Supprimez ORDER BY, il n'est pas requis
-- ORDER BY NonNthAmerPlayers DESC

 

 

 

 

 

 

  • Instruction ORDER BY mise en commentaire
Améliorer les performances des requêtes dans SQL Server

Passons à la pratique !

Améliorer les performances des requêtes dans SQL Server

Preparing Video For Download...