Metode alternative 1

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

Dean Smith

Founder, Atamai Analytics

EXISTS

SELECT CustomerID,
       CompanyName,
       ContactName 
FROM Customers c
WHERE EXISTS
        (SELECT 1 
         FROM Orders o
         WHERE c.CustomerID = o.CustomerID);
CustomerID CompanyName ContactName
ALFKI Alfreds Futterkiste Maria Anders
LAUGB Laughing Bacchus Wine Cellars Yoshi Tannamuri
QUICK QUICK-Stop Horst Kloss
... ... ...
Îmbunătățirea performanței interogărilor în SQL Server

IN

SELECT CustomerID,
       CompanyName,
       ContactName 
FROM Customers
WHERE CustomerID IN
        (SELECT CustomerID 
         FROM Orders);
CustomerID CompanyName ContactName
ALFKI Alfreds Futterkiste Maria Anders
LAUGB Laughing Bacchus Wine Cellars Yoshi Tannamuri
QUICK QUICK-Stop Horst Kloss
... ... ...
Îmbunătățirea performanței interogărilor în SQL Server

EXISTS vs. IN

 

  • EXISTS oprește căutarea în subinterogare când condiția este TRUE

 

  • IN colectează toate rezultatele din subinterogare înainte de a le transmite interogării externe

 

  • Luați în considerare utilizarea EXISTS în locul IN cu o subinterogare
Îmbunătățirea performanței interogărilor în SQL Server

NOT EXISTS

SELECT CustomerID,
       CompanyName,
       ContactName 
FROM Customers c
WHERE NOT EXISTS 
        (SELECT 1 
         FROM Orders o
         WHERE c.CustomerID = o.CustomerID);
CustomerID CompanyName ContactName
FISSA FISSA Fabrica Inter. Salchichas S.A. Diego Roel
PARIS Paris spécialités Marie Bertrand
Îmbunătățirea performanței interogărilor în SQL Server

NOT IN

SELECT CustomerID,
       CompanyName,
       ContactName 
FROM Customers
WHERE CustomerID NOT IN
        (SELECT CustomerID 
         FROM Orders);
CustomeID CompanyName ContactName
FISSA FISSA Fabrica Inter. Salchichas S.A. Diego Roel
PARIS Paris spécialités Marie Bertrand
Îmbunătățirea performanței interogărilor în SQL Server

NOT IN și NULL

SELECT UNStatisticalRegion AS UN_Region
      ,CountryName
      ,Capital
FROM Nations
WHERE Capital NOT IN 
        (SELECT NearestPop 
         FROM Earthquakes);
UN_Region CountryName Capital
Îmbunătățirea performanței interogărilor în SQL Server

Gestionarea NULL în NOT IN

SELECT UNStatisticalRegion AS UN_Region
      ,CountryName
      ,Capital
FROM Nations
WHERE Capital NOT IN 
        (SELECT NearestPop 
         FROM Earthquakes
         WHERE NearestPop IS NOT NULL);
UN_Region CountryName Capital
South Asia India New Delhi
East Asia and Pacific Indonesia Jakarta
East Asia and Pacific East Timor Dili
Sahara Africa Comoros Moroni
... ... ...
Îmbunătățirea performanței interogărilor în SQL Server

EXISTS, NOT EXISTS, IN și NOT IN

Avantaje

  • Rezultatele pot conține orice coloană din interogarea externă, în orice ordine

Dezavantaje

  • Modul în care NOT IN gestionează valorile NULL din subinterogare
Î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...