9. RBAR
Row By Agonizing Row
• Cursori
• Cicli WHILE
• Cursori lato applicativo
• Funzioni scalari e multi-statement
http://www.sqlservercentral.com/Authors/Articles/Jeff_Moden/80567/
Jeff Moden
10. Scrivere codice più efficiente
• Conoscere tutte le potenzialità del linguaggio
• Non mettere limiti alla fantasia
• Conoscere problemi noti e le possibili soluzioni
• Chiedere aiuto:
• Forums
• #sqlhelp
11. Ci vuole fantasia
• La stessa query può essere espressa in molti
modi diversi
• Anche i problemi più semplici possono essere
risolti in modi sorprendenti
• Non scartiamo nulla a priori
• Contiamo fino a 10
13. Come misurare le prestazioni
• Tempo di esecuzione in SSMS?
• Comprende il tempo di trasferimento e formattazione dei risultati
• Scartare i risultati
• SET STATISTICS TIME
• Trace
• XE Session
• Ripetere l’esecuzione un numero sufficiente di volte
• «Pre-riscaldare» la cache
• Saranno le condizioni in produzione
17. APPLY
• Uso comune: table valued functions
SELECT *
FROM SomeTable AS src
CROSS APPLY SomeFunction(src.SomeColumn);
• Consente di trasformare le funzioni UDF e
MSTVF in funzioni ITVF
18. APPLY
• Altre applicazioni: inline (correlated) subquery
SELECT *
FROM SomeTable AS A
CROSS APPLY (
SELECT *
FROM SomeOtherTable AS A
WHERE A.SomeColumn = B.SomeOtherColumn
) AS CA;
• Spesso può essere tradotto in un JOIN
21. OVER
• Definisce delle «finestre» di righe
• Applica a ciascuna finestra una funzione
• Ranking
• ROW_NUMBER(), RANK(), …
• Aggregate
• MIN(), MAX(), SUM(), …
• Analytic
• LAG(), LEAD(), FIRST_VALUE(), LAST_VALUE(), …
22. OVER
• Da SQL Server 2012 supporta i nuovi costrutti ROWS
e RANGE
• Permettono di calcolare «running aggregates»
• Prima di SQL Server 2012
• Cursori
• Triangular Join
• Quirky Update*
• Quirky XML* *DANGER!
25. TALLY TABLE
• E’ una semplice tabella di numeri
• «Coltellino Svizzero» T-SQL
• Utile per mille applicazioni
• String splitting
• Esplodere una riga per quantità
26. TALLY TABLE
• Può essere una tabella permanente
• Deve essere letta (logical reads)
• Può essere definita «al volo»
• Nessuna logical read
• CTE nella query
• ITVF salvata nel database
30. Set-based Iteration
• Ripete blocchi di codice set-based in un ciclo
• Compromesso tra codice procedurale e set-based
• Può applicare approssimazioni successive a un
problema complesso
33. String Concatenation
• Uso FOR XML PATH(‘’)
• Concatena tutte le righe usando un path vuoto
• Attenzione all’entitizzazione dei caratteri
• < <
35. Links
APPLY
• Understanding and using APPLY
• Part 1 http://bit.ly/1jZqLy0
• Part 2 http://bit.ly/O1CPTY
• Boost Your T-SQL with the APPLY Operator http://bit.ly/1gXKf3d
OVER
• OVER clause enhancements http://bit.ly/1e9lKhB
• New analytic functions in SQL Server 2012 http://bit.ly/O9ATsF
36. Links
Tally Table
• The “Numbers” or “Tally” Table http://bit.ly/1fgTaz3
String Splitting
• Tally OH! An improved SQL 8K “CSV splitter” Function
http://bit.ly/1cHEtWz
Running Totals
• Best approaches for grouped running totals
http://bit.ly/1i2wuTs
37. Links
Islands and Gaps
• The SQL of Gaps and Islands in Sequences http://bit.ly/1firuKa
• Gap detection http://bit.ly/1kH53lf
Bin packing
• Hugo Kornelis’ Bin Packing blog series http://bit.ly/1gdF6WO