Indecși

Îmbunătățirea performanței interogărilor în SQL Server

Dean Smith

Founder, Atamai Analytics

Ce este un index?

  • Structură pentru îmbunătățirea vitezei de accesare a datelor
  • Localizează datele rapid, fără a parcurge întregul tabel
  • Util pentru optimizarea interogărilor cu condiții de filtrare
  • Se aplică coloanelor unui tabel
  • De obicei adăugat de un administrator de baze de date
Îmbunătățirea performanței interogărilor în SQL Server

Indecși clustered și nonclustered

Index clustered

  • Analogie: dicționar
  • Paginile de date ale tabelului sunt ordonate după coloana (coloanele) cu index
  • Permis doar unul per tabel
  • Accelerează operațiunile de căutare
Îmbunătățirea performanței interogărilor în SQL Server

Indecși clustered și nonclustered

Index clustered

  • Analogie: dicționar
  • Paginile de date ale tabelului sunt ordonate după coloana (coloanele) cu index
  • Permis doar unul per tabel
  • Accelerează operațiunile de căutare

Index nonclustered

  • Analogie: index la sfârșitul unui manual
  • Conține un nivel ordonat de pointeri de index către pagini de date neordonate
  • Un tabel poate avea mai mulți
  • Îmbunătățește operațiunile de inserare și actualizare
Îmbunătățirea performanței interogărilor în SQL Server

Index clustered: structura B-tree

 

  • ROOT NODE

 

  • BRANCH NODES

 

  • PAGE NODES
Îmbunătățirea performanței interogărilor în SQL Server

Index clustered: structura B-tree

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 | ...
       ...                ...                ...                 ...
Îmbunătățirea performanței interogărilor în SQL Server

Tabelul Customers fără index clustered

SELECT *
FROM Customers
WHERE CustomerID = "PARIS"
PAGE NODES:
            Page 1
         CustomerID |...
         ALFKI | ... 
         ANATR | ...
         BLONP | ... 
         BSBEV | ...
         ...                 
Îmbunătățirea performanței interogărilor în SQL Server

Tabelul Customers fără index clustered

SELECT *
FROM Customers
WHERE CustomerID = "PARIS"
PAGE NODES:
            Page 1              Page 2
         CustomerID |...     CustomerID|...
         ALFKI | ...         FOLIG | ...
         ANATR | ...         FRANK | ...
         BLONP | ...         GALED | ...
         BSBEV | ...         GREAL | ...
         ...                 ...
Îmbunătățirea performanței interogărilor în SQL Server

Tabelul Customers fără index clustered

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 | ...   
         ...                 ...                 ...          
Îmbunătățirea performanței interogărilor în SQL Server

Tabelul Customers fără index clustered

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 | ...          
         ...                 ...                 ...                  ...
Îmbunătățirea performanței interogărilor în SQL Server

Tabelul Customers cu index clustered

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 | ...
                 ...                 ...                 ...                  ...
Îmbunătățirea performanței interogărilor în SQL Server

Tabelul Customers cu index clustered

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 | ...
                 ...                 ...                 ...                  ...
Îmbunătățirea performanței interogărilor în SQL Server

Tabelul Customers cu index clustered

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 | ...
                 ...                 ...                 ...                  ...
Îmbunătățirea performanței interogărilor în SQL Server

Tabelul Customers cu index clustered

SELECT *
FROM Customers
WHERE CustomerID = "PARIS"
ROOT NODE:                          
                                                     OLDWO WOLZA
BRANCH NODES:
                                                                          OLDWO QUICK 
PAGE NODES:
                                                                                 Page 4
                                                                              CustomerID | ...
                                                                              OCEAN | ...
                                                                              PARIS | ...
                                                                              PICCO | ...
                                                                              QUICK | ...
                                                                              ...
Îmbunătățirea performanței interogărilor în SQL Server

Tabelul Customers cu index clustered

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



                                                                             PARIS | ...


Îmbunătățirea performanței interogărilor în SQL Server

Index clustered: exemplu

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

Tabelul PlayerStats fără index

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

 

Tabelul PlayerStats cu index clustered pe Team

Table 'PlayerStats'. ..., logical reads 2, ...
Îmbunătățirea performanței interogărilor în SQL Server

Să exersăm!

Îmbunătățirea performanței interogărilor în SQL Server

Preparing Video For Download...