Download - Set Based Thinking
![Page 2: Set Based Thinking](https://reader035.vdocuments.mx/reader035/viewer/2022062514/558ecc0c1a28ab373c8b4783/html5/thumbnails/2.jpg)
brought to you by
![Page 3: Set Based Thinking](https://reader035.vdocuments.mx/reader035/viewer/2022062514/558ecc0c1a28ab373c8b4783/html5/thumbnails/3.jpg)
Works with SQL Server from 6.5, on BI from 2003
Specialized in Data Solution Architecture, Database Design, Performance Tuning, BI
Microsoft SQL Server MVP
President of UGISS (Italian SQL Server UG)
Mentor @ SolidQ
Regular Speaker @ SQL Server events
Consulting & Training
Davide Mauri
3
![Page 4: Set Based Thinking](https://reader035.vdocuments.mx/reader035/viewer/2022062514/558ecc0c1a28ab373c8b4783/html5/thumbnails/4.jpg)
Iniziamo con un problema apparentemente sempliceE vediamo dove ci porta
Dobbiamo sviluppare una sistema di online-ticketing per la prenotazione di posti a sedere in teatri / stadi / cinema, ecc. ecc.
Problema
![Page 5: Set Based Thinking](https://reader035.vdocuments.mx/reader035/viewer/2022062514/558ecc0c1a28ab373c8b4783/html5/thumbnails/5.jpg)
Supponiamo di avere questa situazione
Arriva un gruppo di 5 persone: dove gli dico di sedersi?Che algoritmo implemento nel mio sistema?
Cinema, teatri e magazzini
![Page 6: Set Based Thinking](https://reader035.vdocuments.mx/reader035/viewer/2022062514/558ecc0c1a28ab373c8b4783/html5/thumbnails/6.jpg)
Cinema, teatri e magazzini – Row by Row
3 4 5 6 7 9A. Imposta il «Contatore Posti Liberi» (CPL) a 1B.Memorizza il valore ordinale (n) del primo posto
libero trovato (PPL)C.Se il successivo posto libero ha ordinale n+1
allora aumenta il contatore CPLD.Altrimenti memorizza PPL e CPL da qualche parteE. Riparti da A
1 2 5 1
![Page 7: Set Based Thinking](https://reader035.vdocuments.mx/reader035/viewer/2022062514/558ecc0c1a28ab373c8b4783/html5/thumbnails/7.jpg)
Dem
o Prova su strada
![Page 8: Set Based Thinking](https://reader035.vdocuments.mx/reader035/viewer/2022062514/558ecc0c1a28ab373c8b4783/html5/thumbnails/8.jpg)
E’ il migliore?…oppure solamente il primo che ci è venuto in mente?
E’ veramente cosi semplice come ci sembra?…alla fine il codice è molto meno semplice di quanto ipotizzato!
E’ scalabile?Se lo vediamo allo stadio di Maracanà (95.000 posti a sedere) cosa succede?
Cinema, teatri e magazzini – Row by Row
![Page 9: Set Based Thinking](https://reader035.vdocuments.mx/reader035/viewer/2022062514/558ecc0c1a28ab373c8b4783/html5/thumbnails/9.jpg)
Dem
o L’alternativa
![Page 10: Set Based Thinking](https://reader035.vdocuments.mx/reader035/viewer/2022062514/558ecc0c1a28ab373c8b4783/html5/thumbnails/10.jpg)
Le performance migliorano di un ordine di grandezza!E di più di uno per quato riguarda gli I/O!!!!
Dobbiamo cambiare il modo di pensare alla soluzioneNon dobbiamo ragionare in termini di ciò che possiamo fare scrivendo il codice T-SQL
Dobbiamo pensare a come trovare la soluzione migliore da un punto di vista puramente “logico”
Considerazioni
Think in Sets!
![Page 11: Set Based Thinking](https://reader035.vdocuments.mx/reader035/viewer/2022062514/558ecc0c1a28ab373c8b4783/html5/thumbnails/11.jpg)
Dobbiamo pensare all’intero insieme dei dati
In questo modo possiamo trovare una soluzione logica esprimibile in modo unicamente dichiarativoE non procedurale!
• Il codice è solamente un “tool”. E’ il mezzo, non il fine!
In questo modo permettiamo all’optimizer di fare il solo lavoro, altrimenti ci sostiuiamo a lui
Thinking in Sets
![Page 12: Set Based Thinking](https://reader035.vdocuments.mx/reader035/viewer/2022062514/558ecc0c1a28ab373c8b4783/html5/thumbnails/12.jpg)
“Houston abbiamo un problema”Siamo abituati a pensare in modo procedurale (visto che la maggior parte dei linguaggi di programmazione lo è)
Dobbiamo quindi disimparare a pensare in questo modo ed imparare a pensare set-based!
Thinking in Sets
![Page 13: Set Based Thinking](https://reader035.vdocuments.mx/reader035/viewer/2022062514/558ecc0c1a28ab373c8b4783/html5/thumbnails/13.jpg)
All’inizio sarà difficile, ma non preoccupateviAll’inizio ogni cosa è difficile!
Thinking in Sets
Un pò meno:Facile: Ma è chiaro chi dei due vincerà in unacompetizione!
Tutto quello di cuiabbiamo bisognoè esercizio!
![Page 14: Set Based Thinking](https://reader035.vdocuments.mx/reader035/viewer/2022062514/558ecc0c1a28ab373c8b4783/html5/thumbnails/14.jpg)
Ora vedremo una serie di problemi reali, incontrati durante differenti consulenzeOpportunamente rimodellati e generalizzati
E vedremo come risolverli usando un approccio “Set-Based”, anche quando non sembra possibile che esista una soluzione in tal sensoVedrete che per la fine della sessione inizierete a “vedere la luce”
• Magari con un pò di mal di testa
Thinking in Sets
![Page 15: Set Based Thinking](https://reader035.vdocuments.mx/reader035/viewer/2022062514/558ecc0c1a28ab373c8b4783/html5/thumbnails/15.jpg)
Iniz
iam
o!
![Page 16: Set Based Thinking](https://reader035.vdocuments.mx/reader035/viewer/2022062514/558ecc0c1a28ab373c8b4783/html5/thumbnails/16.jpg)
Dati valore del prestito, inizio e fine dello stesso, frequenza di pagamento e interessi, generare tutte le righe corrispondenti a tutte le date di scadenza delle rate
Rate, Mutui & Prestiti
Loan Value# Rates
Payment Frequency
% Interest
€ 10.000,00 12 1 5,00% € 20.000,00 12 6 6,00% € 30.000,00 12 6 5,50%
Rate Date
€ 875,00 January-10
€ 875,00 February-10
€ 875,00 March-10
€ 875,00 April-19
€ 875,00 May-10
€ 875,00 June-10
€ 875,00 July-10
€ 875,00 August-10
€ 875,00 September-10
€ 875,00 October-10
€ 875,00 November-10
€ 875,00 December-10
![Page 17: Set Based Thinking](https://reader035.vdocuments.mx/reader035/viewer/2022062514/558ecc0c1a28ab373c8b4783/html5/thumbnails/17.jpg)
Dem
o
Calcolo delle rate
![Page 18: Set Based Thinking](https://reader035.vdocuments.mx/reader035/viewer/2022062514/558ecc0c1a28ab373c8b4783/html5/thumbnails/18.jpg)
Data una lista di macchine, restituire l’ultimo stato notificato nel log di lavoro
Raggruppamenti e valori correlati
ControllerABC
Controller StatusTimeSta
mpA StandBy 1001B StandBy 1001C StandBy 1003D Working 1004A Working 1004B StandBy 1006D StandBy 1009D Working 1010D Working 1011
![Page 19: Set Based Thinking](https://reader035.vdocuments.mx/reader035/viewer/2022062514/558ecc0c1a28ab373c8b4783/html5/thumbnails/19.jpg)
Dem
o
Raggruppamenti e
valori correlati
![Page 20: Set Based Thinking](https://reader035.vdocuments.mx/reader035/viewer/2022062514/558ecc0c1a28ab373c8b4783/html5/thumbnails/20.jpg)
Data una tabella contenente tutte le transazioni giornarliere, estrarre per ogni azione, per ogni ora, i valori di apertura, chiusura, ecc.
Azioni
SymbolID TransactionDateTime Price Volume
12008-01-01
09:15:21.000 75.800 2589
12008-01-01
09:25:44.000 68.200 4386
12008-01-01
09:29:31.000 74.300 2837
12008-01-01
09:34:42.000 68.900 2937
12008-01-01
09:39:13.000 72.300 4513
12008-01-01
09:43:35.000 67.300 838
12008-01-01
09:51:57.000 73.800 1380
12008-01-01
09:56:42.000 68.700 4190
tran_hourfrom_datetime to_datetime symbol_id high low volume open close
92008-01-01 09:15:21.000
2008-01-01 09:56:42.000 1 75.800 67.300 23670 75.800 68.700
![Page 21: Set Based Thinking](https://reader035.vdocuments.mx/reader035/viewer/2022062514/558ecc0c1a28ab373c8b4783/html5/thumbnails/21.jpg)
Dem
o
Borsa & Azioni
![Page 22: Set Based Thinking](https://reader035.vdocuments.mx/reader035/viewer/2022062514/558ecc0c1a28ab373c8b4783/html5/thumbnails/22.jpg)
Supponiamo di avere questa situazione
Arriva un gruppo di 5 persone: dove gli dico di sedersi?Che algoritmo implemento nel mio sistema?
Cinema, teatri e magazzini
![Page 23: Set Based Thinking](https://reader035.vdocuments.mx/reader035/viewer/2022062514/558ecc0c1a28ab373c8b4783/html5/thumbnails/23.jpg)
Cinema, teatri e magazzini – Set Based
A.Se SQL Server potesse vedere l’immagine qui soprapotrebbe facilmente identificare dei gruppi
E quindi potremmo usare un semplice «Group By»B.Dobbiamo quindi trovare il modo di «convertire» questa
caratteristica «visuale» in un qualcosa di utilizzabile da SQL Server
Più che convertire...far emergere
![Page 24: Set Based Thinking](https://reader035.vdocuments.mx/reader035/viewer/2022062514/558ecc0c1a28ab373c8b4783/html5/thumbnails/24.jpg)
Cinema, teatri e magazzini – Set Based
A.Enumeriamo tutti i postiB.Enumeriamo solo i posti liberiC.Facciamo una differenzaD.Ed ora possiamo fare un bel GROUP BY!
1 2 3 4 5 6 7 8 910…
1 2 3 4 5 6 7 …2 2 2 2 2 3 3
![Page 25: Set Based Thinking](https://reader035.vdocuments.mx/reader035/viewer/2022062514/558ecc0c1a28ab373c8b4783/html5/thumbnails/25.jpg)
Dem
o
Cinema, teatri e
magazzini
![Page 26: Set Based Thinking](https://reader035.vdocuments.mx/reader035/viewer/2022062514/558ecc0c1a28ab373c8b4783/html5/thumbnails/26.jpg)
Data una lista di macchine, raggruppare per range tutti gli stati riportati
Raggruppamenti e Range
Controller StatusTimeStam
pA StandBy 1001B StandBy 1002B StandBy 1003B StandBy 1004A Working 1005A Working 1006A Working 1007B Working 1008B Working 1009A StandBy 1010A StandBy 1011B StandBy 1012
Controller Status From To
AStandB
y 1001 1001
BStandB
y 1002 1004
AWorkin
g 1005 1007
BWorkin
g 1008 1009
AStandB
y 1010 1011
BStandB
y 1012 1012
![Page 27: Set Based Thinking](https://reader035.vdocuments.mx/reader035/viewer/2022062514/558ecc0c1a28ab373c8b4783/html5/thumbnails/27.jpg)
Dem
o
Raggruppamenti e
range
![Page 28: Set Based Thinking](https://reader035.vdocuments.mx/reader035/viewer/2022062514/558ecc0c1a28ab373c8b4783/html5/thumbnails/28.jpg)
Grazie a tutti per la partecipazione
Riceverete il link per il download a slide e demo via email nei prossimi giorni
Per contattarmi
Grazie