Set Based Thinking
Upcoming SlideShare
Loading in...5
×
 

Set Based Thinking

on

  • 346 views

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

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%!

Statistics

Views

Total Views
346
Views on SlideShare
346
Embed Views
0

Actions

Likes
0
Downloads
2
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

CC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • 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 Set Based Thinking Presentation Transcript

  • 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 Tuning, BIMicrosoft SQL Server MVPPresident of UGISS (Italian SQL Server UG)Mentor @ SolidQRegular Speaker @ SQL Server eventsConsulting & TrainingDavide Mauri3
  • 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
  • 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
  • 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
  • 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 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
  • DemoL’alternativa
  • 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
  • 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
  • “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
  • 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!
  • 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
  • Iniziamo!
  • 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
  • DemoCalcolo delle rate
  • 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
  • DemoRaggruppamenti e valoricorrelati
  • 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
  • DemoBorsa & Azioni
  • 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
  • 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 
  • 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
  • DemoCinema, teatri emagazzini
  • 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
  • DemoRaggruppamenti e range
  • Grazie a tutti per la partecipazioneRiceverete il link per il download a slide e demo via email neiprossimi giorniPer contattarmidmauri@solidq.comGrazie