41
11-12 marzo 2014 Milano

TSQL Advanced Query Techniques

Embed Size (px)

Citation preview

Page 1: TSQL Advanced Query Techniques

11-12 marzo 2014Milano

Page 2: TSQL Advanced Query Techniques

GRAZIE AI NOSTRI SPONSOR

Page 3: TSQL Advanced Query Techniques

#sqlc2014

Page 4: TSQL Advanced Query Techniques

T-SQL ADVANCED QUERY TECHNIQUES

Gianluca Sartori

SQL408

sqlconsulting.it, [email protected]

Page 5: TSQL Advanced Query Techniques

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

Agenda• Scrivere codice performante• Misurare le prestazioni• APPLY• OVER• Tally Tables• Set-based iteration• String Concatenation

Page 7: TSQL Advanced Query Techniques

SCRIVERE CODICE PERFORMANTE

Page 8: TSQL Advanced Query Techniques

La piramide del performance tuning

Page 9: TSQL Advanced Query Techniques

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

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

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

COME MISURARE LE PRESTAZIONI

Page 13: TSQL Advanced Query Techniques

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

DEMOMisurare le prestazioni

Page 15: TSQL Advanced Query Techniques

APPLY

Page 16: TSQL Advanced Query Techniques

APPLY

• Operatore tabellare• Applica una funzione tabellare ad un set di input

Page 17: TSQL Advanced Query Techniques

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

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

DEMOAPPLY

Page 20: TSQL Advanced Query Techniques

OVER

Page 21: TSQL Advanced Query Techniques

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

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

DEMOOVER

Page 24: TSQL Advanced Query Techniques

TALLY TABLE

Page 25: TSQL Advanced Query Techniques

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

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

String splitting

WHERE SUBSTRING(@pString,t.N,1) = ','

SUBSTRING(@pString, l.N1, l.L1)

Page 28: TSQL Advanced Query Techniques

DEMOString splitting

Page 29: TSQL Advanced Query Techniques

SET-BASED ITERATION

Page 30: TSQL Advanced Query Techniques

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

DEMOAssegnazione ordini a magazzino

Page 32: TSQL Advanced Query Techniques

STRING CONCATENATION

Page 33: TSQL Advanced Query Techniques

String Concatenation

• Uso FOR XML PATH(‘’)• Concatena tutte le righe usando un path vuoto

• Attenzione all’entitizzazione dei caratteri• < &lt;

Page 34: TSQL Advanced Query Techniques

DEMOString concatenation

Page 35: TSQL Advanced Query Techniques

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

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

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

QUESTIONS&

ANSWERS

Page 39: TSQL Advanced Query Techniques

Grazie.Non dimenticare di riempire il modulo di feedback

SQL408

Page 40: TSQL Advanced Query Techniques

#sqlc2014

Page 41: TSQL Advanced Query Techniques

© 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.