Indexen

De queryprestaties verbeteren in SQL Server

Dean Smith

Founder, Atamai Analytics

Wat is een index?

  • Structuur om data sneller uit een tabel op te halen
  • Lokaliseert data snel zonder de hele tabel te scannen
  • Handig voor queries met filters
  • Toegepast op tabelkolommen
  • Meestal toegevoegd door een databasebeheerder
De queryprestaties verbeteren in SQL Server

Clustered en nonclustered indexen

Clustered index

  • Vergelijking: woordenboek
  • Tabelpagina's zijn geordend op de indexkolom(men)
  • Slechts één per tabel
  • Versnelt zoeken
De queryprestaties verbeteren in SQL Server

Clustered en nonclustered indexen

Clustered index

  • Vergelijking: woordenboek
  • Tabelpagina's zijn geordend op de indexkolom(men)
  • Slechts één per tabel
  • Versnelt zoeken

Nonclustered index

  • Vergelijking: leerboek met register achterin
  • Structuur met een geordende laag indexpointers naar ongeordende tabelpagina's
  • Een tabel kan er meerdere hebben
  • Verbetert insert- en updatebewerkingen
De queryprestaties verbeteren in SQL Server

Clustered index: B-treestructuur

 

  • ROOT NODE

 

  • BRANCH NODES

 

  • PAGINAKNOOPPUNTEN
De queryprestaties verbeteren in SQL Server

Clustered index: B-treestructuur

ROOT NODE:                          
                                    A G O W
BRANCH NODES:
                A B E F             G H J K             O P S T
PAGINAKNOOPPUNTEN:
          Pagina 1           Pagina 2           Pagina 3            Pagina 4
       Indexkolom |...  Indexkolom |...  Indexkolom | ...  Indexkolom | ...
       A | ...            E | ...            I | ...             M | ...
       B | ...            F | ...            J | ...             N | ...
       C | ...            G | ...            K | ...             O | ...
       D | ...            H | ...            L | ...             P | ...
       ...                ...                ...                 ...
De queryprestaties verbeteren in SQL Server

Customers-tabel zonder clustered index

SELECT *
FROM Customers
WHERE CustomerID = "PARIS"
PAGINAKNOOPPUNTEN:
            Pagina 1
         CustomerID |...
         ALFKI | ... 
         ANATR | ...
         BLONP | ... 
         BSBEV | ...
         ...                 
De queryprestaties verbeteren in SQL Server

Customers-tabel zonder clustered index

SELECT *
FROM Customers
WHERE CustomerID = "PARIS"
PAGINAKNOOPPUNTEN:
            Pagina 1            Pagina 2
         CustomerID |...     CustomerID|...
         ALFKI | ...         FOLIG | ...
         ANATR | ...         FRANK | ...
         BLONP | ...         GALED | ...
         BSBEV | ...         GREAL | ...
         ...                 ...
De queryprestaties verbeteren in SQL Server

Customers-tabel zonder clustered index

SELECT *
FROM Customers
WHERE CustomerID = "PARIS"
PAGINAKNOOPPUNTEN:
            Pagina 1            Pagina 2            Pagina 3
         CustomerID |...     CustomerID|...      CustomerID | ... 
         ALFKI | ...         FOLIG | ...         LILAS | ...  
         ANATR | ...         FRANK | ...         LINOD | ...  
         BLONP | ...         GALED | ...         MEREP | ...  
         BSBEV | ...         GREAL | ...         MORGK | ...   
         ...                 ...                 ...          
De queryprestaties verbeteren in SQL Server

Customers-tabel zonder clustered index

SELECT *
FROM Customers
WHERE CustomerID = "PARIS"
PAGINAKNOOPPUNTEN:
            Pagina 1            Pagina 2            Pagina 3             Pagina 4
         CustomerID |...     CustomerID|...      CustomerID | ...     CustomerID | ...
         ALFKI | ...         FOLIG | ...         LILAS | ...          OCEAN | ...
         ANATR | ...         FRANK | ...         LINOD | ...          PARIS | ...
         BLONP | ...         GALED | ...         MEREP | ...           
         BSBEV | ...         GREAL | ...         MORGK | ...          
         ...                 ...                 ...                  ...
De queryprestaties verbeteren in SQL Server

Customers-tabel met clustered index

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
PAGINAKNOOPPUNTEN:
                    Pagina 1            Pagina 2            Pagina 3             Pagina 4
                 CustomerID |...     CustomerID|...      CustomerID | ...     CustomerID | ...
                 ALFKI | ...         FOLIG | ...         LILAS | ...          OCEAN | ...
                 ANATR | ...         FRANK | ...         LINOD | ...          PARIS | ...
                 BLONP | ...         GALED | ...         MEREP | ...          PICCO | ...
                 BSBEV | ...         GREAL | ...         MORGK | ...          QUICK | ...
                 ...                 ...                 ...                  ...
De queryprestaties verbeteren in SQL Server

Customers-tabel met clustered index

SELECT *
FROM Customers
WHERE CustomerID = "PARIS"
ROOT NODE:                          
                                                     OLDWO WOLZA
BRANCH NODES:
              ALFKI BONAP DRACD FISSA    FOLIG GALED LILAS NORTS    OCEAN OLDWO QUICK WOLZA
PAGINAKNOOPPUNTEN:
                    Pagina 1            Pagina 2            Pagina 3             Pagina 4
                 CustomerID |...     CustomerID|...      CustomerID | ...     CustomerID | ...
                 ALFKI | ...         FOLIG | ...         LILAS | ...          OCEAN | ...
                 ANATR | ...         FRANK | ...         LINOD | ...          PARIS | ...
                 BLONP | ...         GALED | ...         MEREP | ...          PICCO | ...
                 BSBEV | ...         GREAL | ...         MORGK | ...          QUICK | ...
                 ...                 ...                 ...                  ...
De queryprestaties verbeteren in SQL Server

Customers-tabel met clustered index

SELECT *
FROM Customers
WHERE CustomerID = "PARIS"
ROOT NODE:                          
                                                     OLDWO WOLZA
BRANCH NODES:
                                                                          OLDWO QUICK 
PAGINAKNOOPPUNTEN:
                    Pagina 1            Pagina 2            Pagina 3             Pagina 4
                 CustomerID |...     CustomerID|...      CustomerID | ...     CustomerID | ...
                 ALFKI | ...         FOLIG | ...         LILAS | ...          OCEAN | ...
                 ANATR | ...         FRANK | ...         LINOD | ...          PARIS | ...
                 BLONP | ...         GALED | ...         MEREP | ...          PICCO | ...
                 BSBEV | ...         GREAL | ...         MORGK | ...          QUICK | ...
                 ...                 ...                 ...                  ...
De queryprestaties verbeteren in SQL Server

Customers-tabel met clustered index

SELECT *
FROM Customers
WHERE CustomerID = "PARIS"
ROOT NODE:                          
                                                     OLDWO WOLZA
BRANCH NODES:
                                                                          OLDWO QUICK 
PAGINAKNOOPPUNTEN:
                                                                                 Pagina 4
                                                                              CustomerID | ...
                                                                              OCEAN | ...
                                                                              PARIS | ...
                                                                              PICCO | ...
                                                                              QUICK | ...
                                                                              ...
De queryprestaties verbeteren in SQL Server

Customers-tabel met clustered index

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



                                                                             PARIS | ...


De queryprestaties verbeteren in SQL Server

Clustered index: voorbeeld

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

Tabel PlayerStats zonder index

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

 

Tabel PlayerStats met clustered index op Team

Table 'PlayerStats'. ..., logical reads 2, ...
De queryprestaties verbeteren in SQL Server

Laten we oefenen!

De queryprestaties verbeteren in SQL Server

Preparing Video For Download...