Template designed bySet Based ThinkingDavide Mauridmauri@solidq.comwww.davidemauri.it
brought to you by
Works with SQL Server from 6.5, on BI from 2003Specialized in Data Solution Architecture, DatabaseDesign, Performance Tuni...
Iniziamo con un problema apparentemente sempliceE vediamo dove ci portaDobbiamo sviluppare una sistema di online-ticketing...
Supponiamo di avere questa situazioneArriva un gruppo di 5 persone: dove gli dico di sedersi?Che algoritmo implemento nel ...
Cinema, teatri e magazzini – Row by Row3 4 5 6 7 9A. Imposta il «Contatore Posti Liberi» (CPL) a 1B. Memorizza il valore o...
DemoProva su strada
E’ il migliore?…oppure solamente il primo che ci è venuto in mente?E’ veramente cosi semplice come ci sembra?…alla fine il...
DemoL’alternativa
Le performance migliorano di un ordine di grandezza!E di più di uno per quato riguarda gli I/O!!!!Dobbiamo cambiare il mod...
Dobbiamo pensare all’intero insieme dei datiIn questo modo possiamo trovare una soluzione logicaesprimibile in modo unicam...
“Houston abbiamo un problema”Siamo abituati a pensare in modo procedurale (visto che la maggior parte deilinguaggi di prog...
All’inizio sarà difficile, ma non preoccupateviAll’inizio ogni cosa è difficile!Thinking in SetsUn pò meno:Facile: Ma è ch...
Ora vedremo una serie di problemi reali, incontrati durantedifferenti consulenzeOpportunamente rimodellati e generalizzati...
Iniziamo!
Dati valore del prestito, inizio e fine dello stesso, frequenzadi pagamento e interessi, generare tutte le righecorrispond...
DemoCalcolo delle rate
Data una lista di macchine, restituire l’ultimo stato notificatonel log di lavoroRaggruppamenti e valori correlatiControll...
DemoRaggruppamenti e valoricorrelati
Data una tabella contenente tutte le transazionigiornarliere, estrarre per ogni azione, per ogni ora, i valori diapertura,...
DemoBorsa & Azioni
Supponiamo di avere questa situazioneArriva un gruppo di 5 persone: dove gli dico di sedersi?Che algoritmo implemento nel ...
Cinema, teatri e magazzini – Set BasedA. Se SQL Server potesse vedere l’immagine qui soprapotrebbe facilmente identificare...
Cinema, teatri e magazzini – Set BasedA. Enumeriamo tutti i postiB. Enumeriamo solo i posti liberiC. Facciamo una differen...
DemoCinema, teatri emagazzini
Data una lista di macchine, raggruppare per range tutti glistati riportatiRaggruppamenti e RangeController Status TimeStam...
DemoRaggruppamenti e range
Grazie a tutti per la partecipazioneRiceverete il link per il download a slide e demo via email neiprossimi giorniPer cont...
Upcoming SlideShare
Loading in …5
×

Set Based Thinking

376 views

Published on

Dai problemi più semplici a quelli più complessi, è la logica con cui si risolve il problema che fa la differenza. E, nel risolvere un problema, non sarebbe bello poter sempicemente dire alla macchina "cosa" si vuole ottenere, lasciando risolvere il problema di "come" farlo, alla macchina stessa? In questo modo essa potrebbe anche tenere conto delle condizioni di contorno, in modo tale di produrre il risultato nel modo migliore possibile. In questa sessione vedremo come poter risolvere problemi comuni utilizzando un approcio "Set-Based" ("pensare per insiemi"), grazie al quale sarà possibile migliorare le performance di oltre il 100%!

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
376
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
10
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • Key Message: Joins supports also other operator than “=“
  • Key Message: Introduce ranking functions and their usage, Show again that with UDF execution plan can tell you “lies”
  • Set Based Thinking

    1. 1. Template designed bySet Based ThinkingDavide Mauridmauri@solidq.comwww.davidemauri.it
    2. 2. brought to you by
    3. 3. Works with SQL Server from 6.5, on BI from 2003Specialized in Data Solution Architecture, DatabaseDesign, Performance Tuning, BIMicrosoft SQL Server MVPPresident of UGISS (Italian SQL Server UG)Mentor @ SolidQRegular Speaker @ SQL Server eventsConsulting & TrainingDavide Mauri3
    4. 4. Iniziamo con un problema apparentemente sempliceE vediamo dove ci portaDobbiamo sviluppare una sistema di online-ticketing per laprenotazione di posti a sedere in teatri / stadi / cinema, ecc.ecc.Problema
    5. 5. Supponiamo di avere questa situazioneArriva un gruppo di 5 persone: dove gli dico di sedersi?Che algoritmo implemento nel mio sistema?Cinema, teatri e magazzini
    6. 6. Cinema, teatri e magazzini – Row by Row3 4 5 6 7 9A. Imposta il «Contatore Posti Liberi» (CPL) a 1B. Memorizza il valore ordinale (n) del primo postolibero trovato (PPL)C. Se il successivo posto libero ha ordinale n+1allora aumenta il contatore CPLD. Altrimenti memorizza PPL e CPL da qualche parteE. Riparti da A1 2 5 1
    7. 7. DemoProva su strada
    8. 8. 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
    9. 9. DemoL’alternativa
    10. 10. 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-SQLDobbiamo pensare a come trovare la soluzione migliore da un punto di vistapuramente “logico”Considerazioni
    11. 11. Dobbiamo pensare all’intero insieme dei datiIn questo modo possiamo trovare una soluzione logicaesprimibile 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 cisostiuiamo a luiThinking in Sets
    12. 12. “Houston abbiamo un problema”Siamo abituati a pensare in modo procedurale (visto che la maggior parte deilinguaggi di programmazione lo è)Dobbiamo quindi disimparare a pensare in questo modo edimparare a pensare set-based!Thinking in Sets
    13. 13. All’inizio sarà difficile, ma non preoccupateviAll’inizio ogni cosa è difficile!Thinking in SetsUn pò meno:Facile: Ma è chiaro chi deidue vincerà in unacompetizione!Tutto quello di cuiabbiamo bisognoè esercizio!
    14. 14. Ora vedremo una serie di problemi reali, incontrati durantedifferenti consulenzeOpportunamente rimodellati e generalizzati E vedremo come risolverli usando un approccio “Set-Based”,anche quando non sembra possibile che esista unasoluzione 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
    15. 15. Iniziamo!
    16. 16. Dati valore del prestito, inizio e fine dello stesso, frequenzadi pagamento e interessi, generare tutte le righecorrispondenti a tutte le date di scadenza delle rateRate, Mutui & PrestitiLoan 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
    17. 17. DemoCalcolo delle rate
    18. 18. Data una lista di macchine, restituire l’ultimo stato notificatonel log di lavoroRaggruppamenti e valori correlatiControllerABCController Status TimeStampA StandBy 1001B StandBy 1001C StandBy 1003D Working 1004A Working 1004B StandBy 1006D StandBy 1009D Working 1010D Working 1011
    19. 19. DemoRaggruppamenti e valoricorrelati
    20. 20. Data una tabella contenente tutte le transazionigiornarliere, estrarre per ogni azione, per ogni ora, i valori diapertura, chiusura, ecc.AzioniSymbolID TransactionDateTime Price Volume1 2008-01-01 09:15:21.000 75.800 25891 2008-01-01 09:25:44.000 68.200 43861 2008-01-01 09:29:31.000 74.300 28371 2008-01-01 09:34:42.000 68.900 29371 2008-01-01 09:39:13.000 72.300 45131 2008-01-01 09:43:35.000 67.300 8381 2008-01-01 09:51:57.000 73.800 13801 2008-01-01 09:56:42.000 68.700 4190tran_hour from_datetime to_datetime symbol_id high low volume open close92008-01-0109:15:21.0002008-01-0109:56:42.000 1 75.800 67.300 23670 75.800 68.700
    21. 21. DemoBorsa & Azioni
    22. 22. Supponiamo di avere questa situazioneArriva un gruppo di 5 persone: dove gli dico di sedersi?Che algoritmo implemento nel mio sistema?Cinema, teatri e magazzini
    23. 23. Cinema, teatri e magazzini – Set BasedA. Se SQL Server potesse vedere l’immagine qui soprapotrebbe facilmente identificare dei gruppiE quindi potremmo usare un semplice «Group By»B. Dobbiamo quindi trovare il modo di «convertire» questacaratteristica «visuale» in un qualcosa di utilizzabile daSQL ServerPiù che convertire...far emergere 
    24. 24. Cinema, teatri e magazzini – Set BasedA. 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 9 10…1 2 3 4 5 6 7 …2 2 2 2 2 3 3
    25. 25. DemoCinema, teatri emagazzini
    26. 26. Data una lista di macchine, raggruppare per range tutti glistati riportatiRaggruppamenti e RangeController Status TimeStampA StandBy 1001B StandBy 1002B StandBy 1003B StandBy 1004A Working 1005A Working 1006A Working 1007B Working 1008B Working 1009A StandBy 1010A StandBy 1011B StandBy 1012Controller Status From ToA StandBy 1001 1001B StandBy 1002 1004A Working 1005 1007B Working 1008 1009A StandBy 1010 1011B StandBy 1012 1012
    27. 27. DemoRaggruppamenti e range
    28. 28. Grazie a tutti per la partecipazioneRiceverete il link per il download a slide e demo via email neiprossimi giorniPer contattarmidmauri@solidq.comGrazie

    ×