tsql advanced query techniques
TRANSCRIPT
![Page 1: TSQL Advanced Query Techniques](https://reader036.vdocuments.mx/reader036/viewer/2022062420/55c3473cbb61ebb87b8b4648/html5/thumbnails/1.jpg)
11-12 marzo 2014Milano
![Page 2: TSQL Advanced Query Techniques](https://reader036.vdocuments.mx/reader036/viewer/2022062420/55c3473cbb61ebb87b8b4648/html5/thumbnails/2.jpg)
GRAZIE AI NOSTRI SPONSOR
![Page 3: TSQL Advanced Query Techniques](https://reader036.vdocuments.mx/reader036/viewer/2022062420/55c3473cbb61ebb87b8b4648/html5/thumbnails/3.jpg)
#sqlc2014
![Page 5: TSQL Advanced Query Techniques](https://reader036.vdocuments.mx/reader036/viewer/2022062420/55c3473cbb61ebb87b8b4648/html5/thumbnails/5.jpg)
GIANLUCA SARTORI
• Consulente Freelance
• 15 anni di esperienza SQL Server, dalla v. 7
• Specializzato in performance tuning
• MCTS, MCITP, MCT
• DBA @ Scuderia Formula 1
• BLOG: http://spaghettidba.com/
• TWITTER: @spaghettidba
![Page 6: TSQL Advanced Query Techniques](https://reader036.vdocuments.mx/reader036/viewer/2022062420/55c3473cbb61ebb87b8b4648/html5/thumbnails/6.jpg)
Agenda• Scrivere codice performante• Misurare le prestazioni• APPLY• OVER• Tally Tables• Set-based iteration• String Concatenation
![Page 7: TSQL Advanced Query Techniques](https://reader036.vdocuments.mx/reader036/viewer/2022062420/55c3473cbb61ebb87b8b4648/html5/thumbnails/7.jpg)
SCRIVERE CODICE PERFORMANTE
![Page 8: TSQL Advanced Query Techniques](https://reader036.vdocuments.mx/reader036/viewer/2022062420/55c3473cbb61ebb87b8b4648/html5/thumbnails/8.jpg)
La piramide del performance tuning
![Page 9: TSQL Advanced Query Techniques](https://reader036.vdocuments.mx/reader036/viewer/2022062420/55c3473cbb61ebb87b8b4648/html5/thumbnails/9.jpg)
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
![Page 10: TSQL Advanced Query Techniques](https://reader036.vdocuments.mx/reader036/viewer/2022062420/55c3473cbb61ebb87b8b4648/html5/thumbnails/10.jpg)
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
![Page 11: TSQL Advanced Query Techniques](https://reader036.vdocuments.mx/reader036/viewer/2022062420/55c3473cbb61ebb87b8b4648/html5/thumbnails/11.jpg)
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
![Page 12: TSQL Advanced Query Techniques](https://reader036.vdocuments.mx/reader036/viewer/2022062420/55c3473cbb61ebb87b8b4648/html5/thumbnails/12.jpg)
COME MISURARE LE PRESTAZIONI
![Page 13: TSQL Advanced Query Techniques](https://reader036.vdocuments.mx/reader036/viewer/2022062420/55c3473cbb61ebb87b8b4648/html5/thumbnails/13.jpg)
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
![Page 14: TSQL Advanced Query Techniques](https://reader036.vdocuments.mx/reader036/viewer/2022062420/55c3473cbb61ebb87b8b4648/html5/thumbnails/14.jpg)
DEMOMisurare le prestazioni
![Page 15: TSQL Advanced Query Techniques](https://reader036.vdocuments.mx/reader036/viewer/2022062420/55c3473cbb61ebb87b8b4648/html5/thumbnails/15.jpg)
APPLY
![Page 16: TSQL Advanced Query Techniques](https://reader036.vdocuments.mx/reader036/viewer/2022062420/55c3473cbb61ebb87b8b4648/html5/thumbnails/16.jpg)
APPLY
• Operatore tabellare• Applica una funzione tabellare ad un set di input
![Page 17: TSQL Advanced Query Techniques](https://reader036.vdocuments.mx/reader036/viewer/2022062420/55c3473cbb61ebb87b8b4648/html5/thumbnails/17.jpg)
APPLY
• Uso comune: table valued functionsSELECT *FROM SomeTable AS srcCROSS APPLY
SomeFunction(src.SomeColumn);
• Consente di trasformare le funzioni UDF e MSTVF in funzioni ITVF
![Page 18: TSQL Advanced Query Techniques](https://reader036.vdocuments.mx/reader036/viewer/2022062420/55c3473cbb61ebb87b8b4648/html5/thumbnails/18.jpg)
APPLY
• Altre applicazioni: inline (correlated) subquerySELECT *FROM SomeTable AS ACROSS APPLY (
SELECT *FROM SomeOtherTable AS AWHERE A.SomeColumn = B.SomeOtherColumn
) AS CA;
• Spesso può essere tradotto in un JOIN
![Page 19: TSQL Advanced Query Techniques](https://reader036.vdocuments.mx/reader036/viewer/2022062420/55c3473cbb61ebb87b8b4648/html5/thumbnails/19.jpg)
DEMOAPPLY
![Page 20: TSQL Advanced Query Techniques](https://reader036.vdocuments.mx/reader036/viewer/2022062420/55c3473cbb61ebb87b8b4648/html5/thumbnails/20.jpg)
OVER
![Page 21: TSQL Advanced Query Techniques](https://reader036.vdocuments.mx/reader036/viewer/2022062420/55c3473cbb61ebb87b8b4648/html5/thumbnails/21.jpg)
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(), …
![Page 22: TSQL Advanced Query Techniques](https://reader036.vdocuments.mx/reader036/viewer/2022062420/55c3473cbb61ebb87b8b4648/html5/thumbnails/22.jpg)
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!
![Page 23: TSQL Advanced Query Techniques](https://reader036.vdocuments.mx/reader036/viewer/2022062420/55c3473cbb61ebb87b8b4648/html5/thumbnails/23.jpg)
DEMOOVER
![Page 24: TSQL Advanced Query Techniques](https://reader036.vdocuments.mx/reader036/viewer/2022062420/55c3473cbb61ebb87b8b4648/html5/thumbnails/24.jpg)
TALLY TABLE
![Page 25: TSQL Advanced Query Techniques](https://reader036.vdocuments.mx/reader036/viewer/2022062420/55c3473cbb61ebb87b8b4648/html5/thumbnails/25.jpg)
TALLY TABLE
• E’ una semplice tabella di numeri• «Coltellino Svizzero» T-SQL• Utile per mille applicazioni• String splitting• Esplodere una riga per quantità
![Page 26: TSQL Advanced Query Techniques](https://reader036.vdocuments.mx/reader036/viewer/2022062420/55c3473cbb61ebb87b8b4648/html5/thumbnails/26.jpg)
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
![Page 27: TSQL Advanced Query Techniques](https://reader036.vdocuments.mx/reader036/viewer/2022062420/55c3473cbb61ebb87b8b4648/html5/thumbnails/27.jpg)
String splitting
WHERE SUBSTRING(@pString,t.N,1) = ','
SUBSTRING(@pString, l.N1, l.L1)
![Page 28: TSQL Advanced Query Techniques](https://reader036.vdocuments.mx/reader036/viewer/2022062420/55c3473cbb61ebb87b8b4648/html5/thumbnails/28.jpg)
DEMOString splitting
![Page 29: TSQL Advanced Query Techniques](https://reader036.vdocuments.mx/reader036/viewer/2022062420/55c3473cbb61ebb87b8b4648/html5/thumbnails/29.jpg)
SET-BASED ITERATION
![Page 30: TSQL Advanced Query Techniques](https://reader036.vdocuments.mx/reader036/viewer/2022062420/55c3473cbb61ebb87b8b4648/html5/thumbnails/30.jpg)
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
![Page 31: TSQL Advanced Query Techniques](https://reader036.vdocuments.mx/reader036/viewer/2022062420/55c3473cbb61ebb87b8b4648/html5/thumbnails/31.jpg)
DEMOAssegnazione ordini a magazzino
![Page 32: TSQL Advanced Query Techniques](https://reader036.vdocuments.mx/reader036/viewer/2022062420/55c3473cbb61ebb87b8b4648/html5/thumbnails/32.jpg)
STRING CONCATENATION
![Page 33: TSQL Advanced Query Techniques](https://reader036.vdocuments.mx/reader036/viewer/2022062420/55c3473cbb61ebb87b8b4648/html5/thumbnails/33.jpg)
String Concatenation
• Uso FOR XML PATH(‘’)• Concatena tutte le righe usando un path vuoto
• Attenzione all’entitizzazione dei caratteri• < <
![Page 34: TSQL Advanced Query Techniques](https://reader036.vdocuments.mx/reader036/viewer/2022062420/55c3473cbb61ebb87b8b4648/html5/thumbnails/34.jpg)
DEMOString concatenation
![Page 35: TSQL Advanced Query Techniques](https://reader036.vdocuments.mx/reader036/viewer/2022062420/55c3473cbb61ebb87b8b4648/html5/thumbnails/35.jpg)
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
![Page 36: TSQL Advanced Query Techniques](https://reader036.vdocuments.mx/reader036/viewer/2022062420/55c3473cbb61ebb87b8b4648/html5/thumbnails/36.jpg)
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
![Page 37: TSQL Advanced Query Techniques](https://reader036.vdocuments.mx/reader036/viewer/2022062420/55c3473cbb61ebb87b8b4648/html5/thumbnails/37.jpg)
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
![Page 38: TSQL Advanced Query Techniques](https://reader036.vdocuments.mx/reader036/viewer/2022062420/55c3473cbb61ebb87b8b4648/html5/thumbnails/38.jpg)
QUESTIONS&
ANSWERS
![Page 39: TSQL Advanced Query Techniques](https://reader036.vdocuments.mx/reader036/viewer/2022062420/55c3473cbb61ebb87b8b4648/html5/thumbnails/39.jpg)
Grazie.Non dimenticare di riempire il modulo di feedback
SQL408
![Page 40: TSQL Advanced Query Techniques](https://reader036.vdocuments.mx/reader036/viewer/2022062420/55c3473cbb61ebb87b8b4648/html5/thumbnails/40.jpg)
#sqlc2014
![Page 41: TSQL Advanced Query Techniques](https://reader036.vdocuments.mx/reader036/viewer/2022062420/55c3473cbb61ebb87b8b4648/html5/thumbnails/41.jpg)
© EventHandler S.r.l. All rights reserved. Microsoft, Windows and all other trademarks and copyrights are the property of their respective owners. EventHandler cannot guarantee the accuracy of any information provided after the date of this presentation. EVENTHANDLER MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.