sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Server pivot kontra multipel koppling

Svaret blir givetvis "det beror på" men baserat på att testa detta mål...

Förutsatt att

  1. 1 miljon produkter
  2. product har ett klustrat index på product_id
  3. De flesta (om inte alla) produkter har motsvarande information i product_code tabell
  4. Ideala index som finns på product_code för båda frågorna.

PIVOT versionen behöver helst ett index product_code(product_id, type) INCLUDE (code) medan JOIN version behöver helst ett index product_code(type,product_id) INCLUDE (code)

Om dessa finns på plats anger du planerna nedan

sedan JOIN versionen är mer effektiv.

I det fall type 1 och type 2 är de enda types i tabellen sedan PIVOT versionen har en aning fördel när det gäller antal läsningar eftersom den inte behöver söka in product_code två gånger men det vägs mer än upp av den extra omkostnaden för strömaggregatoperatören

PIVOT

Table 'product_code'. Scan count 1, logical reads 10467
Table 'product'. Scan count 1, logical reads 4750
   CPU time = 3297 ms,  elapsed time = 3260 ms.

GÅ MED

Table 'product_code'. Scan count 2, logical reads 10471
Table 'product'. Scan count 1, logical reads 4750
   CPU time = 1906 ms,  elapsed time = 1866 ms.

Om det finns ytterligare type andra poster än 1 och 2 JOIN version kommer att öka sin fördel eftersom den bara slår samman sammanfogningar på de relevanta avsnitten av type,product_id index medan PIVOT planen använder product_id, type och så skulle behöva skanna över den ytterligare type rader som är blandade med 1 och 2 rader.



  1. Oracle:hur är situationen att använda RAISE_APPLICATION_ERROR?

  2. 2 sätt att kontrollera kompatibilitetsnivån i Oracle (SQLcl &SQL*Plus)

  3. Activex ListView Control Tutorial-01

  4. Hur man genererar automatiskt inkrementfält i den valda frågan