Index

Améliorer la performance des requêtes dans SQL Server

Dean Smith

Founder, Atamai Analytics

Qu'est-ce qu'un index ?

  • Structure qui accélère l'accès aux données d'une table
  • Sert à repérer vite les données sans balayer toute la table
  • Utile pour optimiser les requêtes avec conditions de filtrage
  • S'applique aux colonnes de table
  • Généralement ajouté par un administrateur de base de données
Améliorer la performance des requêtes dans SQL Server

Index cluster et non cluster

Index cluster

  • Analogie : dictionnaire
  • Les pages de données sont ordonnées par la ou les colonnes indexées
  • Un seul par table
  • Accélère les recherches
Améliorer la performance des requêtes dans SQL Server

Index cluster et non cluster

Index cluster

  • Analogie : dictionnaire
  • Les pages de données sont ordonnées par la ou les colonnes indexées
  • Un seul par table
  • Accélère les recherches

Index non cluster

  • Analogie : manuel avec index à la fin
  • Structure contenant une couche ordonnée de pointeurs vers des pages de données non ordonnées
  • Une table peut en avoir plusieurs
  • Améliore les insertions et mises à jour
Améliorer la performance des requêtes dans SQL Server

Index cluster : structure en arbre B

 

  • NŒUD RACINE

 

  • NŒUDS INTERMÉDIAIRES

 

  • NŒUDS DE PAGE
Améliorer la performance des requêtes dans SQL Server

Index cluster : structure en arbre B

ROOT NODE:                          
                                    A G O W
BRANCH NODES:
                A B E F             G H J K             O P S T
PAGE NODES:
          Page 1             Page 2             Page 3              Page 4
       Index Column |...  Index Column |...  Index Column | ...  Index Column | ...
       A | ...            E | ...            I | ...             M | ...
       B | ...            F | ...            J | ...             N | ...
       C | ...            G | ...            K | ...             O | ...
       D | ...            H | ...            L | ...             P | ...
       ...                ...                ...                 ...
Améliorer la performance des requêtes dans SQL Server

Table Customers sans index cluster

SELECT *
FROM Customers
WHERE CustomerID = "PARIS"
PAGE NODES:
            Page 1
         CustomerID |...
         ALFKI | ... 
         ANATR | ...
         BLONP | ... 
         BSBEV | ...
         ...                 
Améliorer la performance des requêtes dans SQL Server

Table Customers sans index cluster

SELECT *
FROM Customers
WHERE CustomerID = "PARIS"
PAGE NODES:
            Page 1              Page 2
         CustomerID |...     CustomerID|...
         ALFKI | ...         FOLIG | ...
         ANATR | ...         FRANK | ...
         BLONP | ...         GALED | ...
         BSBEV | ...         GREAL | ...
         ...                 ...
Améliorer la performance des requêtes dans SQL Server

Table Customers sans index cluster

SELECT *
FROM Customers
WHERE CustomerID = "PARIS"
PAGE NODES:
            Page 1              Page 2              Page 3
         CustomerID |...     CustomerID|...      CustomerID | ... 
         ALFKI | ...         FOLIG | ...         LILAS | ...  
         ANATR | ...         FRANK | ...         LINOD | ...  
         BLONP | ...         GALED | ...         MEREP | ...  
         BSBEV | ...         GREAL | ...         MORGK | ...   
         ...                 ...                 ...          
Améliorer la performance des requêtes dans SQL Server

Table Customers sans index cluster

SELECT *
FROM Customers
WHERE CustomerID = "PARIS"
PAGE NODES:
            Page 1              Page 2              Page 3               Page 4
         CustomerID |...     CustomerID|...      CustomerID | ...     CustomerID | ...
         ALFKI | ...         FOLIG | ...         LILAS | ...          OCEAN | ...
         ANATR | ...         FRANK | ...         LINOD | ...          PARIS | ...
         BLONP | ...         GALED | ...         MEREP | ...           
         BSBEV | ...         GREAL | ...         MORGK | ...          
         ...                 ...                 ...                  ...
Améliorer la performance des requêtes dans SQL Server

Table Customers avec index cluster

SELECT *
FROM Customers
WHERE CustomerID = "PARIS"
ROOT NODE:                          
                                         ALFKI FOLIG OLDWO WOLZA
BRANCH NODES:
              ALFKI BONAP DRACD FISSA    FOLIG GALED LILAS NORTS    OCEAN OLDWO QUICK WOLZA
PAGE NODES:
                    Page 1              Page 2              Page 3               Page 4
                 CustomerID |...     CustomerID|...      CustomerID | ...     CustomerID | ...
                 ALFKI | ...         FOLIG | ...         LILAS | ...          OCEAN | ...
                 ANATR | ...         FRANK | ...         LINOD | ...          PARIS | ...
                 BLONP | ...         GALED | ...         MEREP | ...          PICCO | ...
                 BSBEV | ...         GREAL | ...         MORGK | ...          QUICK | ...
                 ...                 ...                 ...                  ...
Améliorer la performance des requêtes dans SQL Server

Table Customers avec index cluster

SELECT *
FROM Customers
WHERE CustomerID = "PARIS"
ROOT NODE:                          
                                                     OLDWO WOLZA
BRANCH NODES:
              ALFKI BONAP DRACD FISSA    FOLIG GALED LILAS NORTS    OCEAN OLDWO QUICK WOLZA
PAGE NODES:
                    Page 1              Page 2              Page 3               Page 4
                 CustomerID |...     CustomerID|...      CustomerID | ...     CustomerID | ...
                 ALFKI | ...         FOLIG | ...         LILAS | ...          OCEAN | ...
                 ANATR | ...         FRANK | ...         LINOD | ...          PARIS | ...
                 BLONP | ...         GALED | ...         MEREP | ...          PICCO | ...
                 BSBEV | ...         GREAL | ...         MORGK | ...          QUICK | ...
                 ...                 ...                 ...                  ...
Améliorer la performance des requêtes dans SQL Server

Table Customers avec index cluster

SELECT *
FROM Customers
WHERE CustomerID = "PARIS"
ROOT NODE:                          
                                                     OLDWO WOLZA
BRANCH NODES:
                                                                          OLDWO QUICK 
PAGE NODES:
                    Page 1              Page 2              Page 3               Page 4
                 CustomerID |...     CustomerID|...      CustomerID | ...     CustomerID | ...
                 ALFKI | ...         FOLIG | ...         LILAS | ...          OCEAN | ...
                 ANATR | ...         FRANK | ...         LINOD | ...          PARIS | ...
                 BLONP | ...         GALED | ...         MEREP | ...          PICCO | ...
                 BSBEV | ...         GREAL | ...         MORGK | ...          QUICK | ...
                 ...                 ...                 ...                  ...
Améliorer la performance des requêtes dans SQL Server

Table Customers avec index cluster

SELECT *
FROM Customers
WHERE CustomerID = "PARIS"
ROOT NODE:                          
                                                     OLDWO WOLZA
BRANCH NODES:
                                                                          OLDWO QUICK 
PAGE NODES:
                                                                                 Page 4
                                                                              CustomerID | ...
                                                                              OCEAN | ...
                                                                              PARIS | ...
                                                                              PICCO | ...
                                                                              QUICK | ...
                                                                              ...
Améliorer la performance des requêtes dans SQL Server

Table Customers avec index cluster

SELECT *
FROM Customers
WHERE CustomerID = "PARIS"
ROOT NODE:                          
                                                     OLDWO WOLZA
BRANCH NODES:
                                                                          OLDWO QUICK 
PAGE NODES:
                                                                                 Page 4
                                                                              CustomerID | ...



                                                                             PARIS | ...


Améliorer la performance des requêtes dans SQL Server

Index cluster : exemple

SET STATISTICS IO ON
SELECT * 
FROM PlayerStats 
WHERE Team = 'OKC'

Table PlayerStats sans index

Table 'PlayerStats'. ..., logical reads 12, ...

 

Table PlayerStats avec index cluster sur Team

Table 'PlayerStats'. ..., logical reads 2, ...
Améliorer la performance des requêtes dans SQL Server

Passons à la pratique !

Améliorer la performance des requêtes dans SQL Server

Preparing Video For Download...