in

UGISS Community

Il sito della community dello User Group Italiano di SQL Server

Domanda execution plan

Last post 02-27-2010 1.39 by sgovoni. 4 replies.
Page 1 of 1 (5 items)
Sort Posts: Previous Next
  • 02-26-2010 14.34

    • sierrodc
    • Top 500 Contributor
    • Joined on 02-26-2010
    • Posts 2
    • Points 40

    Domanda execution plan

    Salve a tutti (è il mio primo post e non vorrei aver sbagliato sezione).

    Premetto che ciò che scrivo è stato testato con sql server 2005 (non ho modo di provare su 2008, e purtroppo non ho un db corposo tale da verificarne i tempi).

    La mia domanda è: l'actual execution plan è reale oppure potrebbe essere errato?

    Prendo in considerazioni i seguenti batch (su northwind):

    1) select ProductID
     , UnitPrice
     , (select AVG(UnitPrice) from [Order Details]) as a
     , (select AVG(UnitPrice) from [Order Details]) as b
     , (select AVG(UnitPrice) from [Order Details]) as c
    from [Order Details]
    GO

    2) select ProductID, UnitPrice, a as A, a as B, a as C
    from (
     select ProductID
      , UnitPrice
      , (select AVG(UnitPrice) from [Order Details]) as a
     from [Order Details]
    ) as k
    GO

    Nel primo caso, osservando l'execution plan, noto come la query presente in select viene eseguita 3 volte, cosa che ovviamente non succede con la seconda. Eseguendo i due comandi, noto come il secondo costi 36% mentre il primo 64%. E' possibile che l'execution plan sia errato? Mi pare strano che sql server esegui per 3 volte lo statement di aggregazione.

    So che forse è una domanda semplice ma non riesco a capire bene di chi non fidarmi :)

    Grazie mille.

    • Post Points: 35
  • 02-26-2010 15.33 In reply to

    • dmauri
    • Top 10 Contributor
      Male
    • Joined on 05-14-2007
    • Novate Milanese
    • Posts 1.907
    • Points 24.955

    Re: Domanda execution plan

    sierrodc:
    Salve a tutti (è il mio primo post e non vorrei aver sbagliato sezione).

    No problem, è corretta Smile

    sierrodc:
    La mia domanda è: l'actual execution plan è reale oppure potrebbe essere errato?

    L'"actual execution plan" è quello effettivamente usato da SQL Server per risolvere la query. Quindi è quello "reale".

    sierrodc:
    Nel primo caso, osservando l'execution plan, noto come la query presente in select viene eseguita 3 volte, cosa che ovviamente non succede con la seconda. Eseguendo i due comandi, noto come il secondo costi 36% mentre il primo 64%. E' possibile che l'execution plan sia errato? Mi pare strano che sql server esegui per 3 volte lo statement di aggregazione

    E' corretto. E' anche corretto che il secondo piano di esecuzione sia molto meno costoso del primo. Nel primo caso tu stai esplicitamente chiedendo a SQL Server di eseguire tre query....e SQL Server fa esattamente quello che gli stai chiedendo Smile

    In realtà è gia abbastranza furbo da riscrivere la tua query come una serie di inner-join, altrimenti dovrebbe eseguire le tre select per ogni riga e non solo una volta!

    Certo, potrebbe essere più intelligence ed ottimizzare in modo più spinto ma, mi vien da dire, se non capiamo noi essere umani che non è intelligente scrivere il codice (1), perchè mai lo dovrebbe capire una macchina? Smile

     

    Davide Mauri
    Microsoft MVP - SQL Server, MCP, MCAD, MCDBA, MCT - http://www.davidemauri.it
    Socio Fondatore e Mentor di Solid Quality Learning Italy - http://www.solidq.com
    Presidente di UGISS: User Group Italiano Sql Server - http://www.ugiss.org
    • Post Points: 5
  • 02-26-2010 15.34 In reply to

    • dmauri
    • Top 10 Contributor
      Male
    • Joined on 05-14-2007
    • Novate Milanese
    • Posts 1.907
    • Points 24.955

    Re: Domanda execution plan

    dmauri:
    Certo, potrebbe essere più intelligence ed ottimizzare in modo più spinto ma, mi vien da dire, se non capiamo noi essere umani che non è intelligente scrivere il codice (1), perchè mai lo dovrebbe capire una macchina?

    Ovviamente non ce l'ho con te, è solamente una battuta, neh Smile

     

    Davide Mauri
    Microsoft MVP - SQL Server, MCP, MCAD, MCDBA, MCT - http://www.davidemauri.it
    Socio Fondatore e Mentor di Solid Quality Learning Italy - http://www.solidq.com
    Presidente di UGISS: User Group Italiano Sql Server - http://www.ugiss.org
    • Post Points: 20
  • 02-26-2010 15.47 In reply to

    • sierrodc
    • Top 500 Contributor
    • Joined on 02-26-2010
    • Posts 2
    • Points 40

    Re: Domanda execution plan

    Ah certo! credevo solo fosse un po' più spinto, anche perchè non sono proprio un "espertone". In ogni modo mi hai confermato che l' "actual execution plan" è vero. Ora devo imparare a leggere bene l'exec plan.

    Grazie mille!

    • Post Points: 5
  • 02-27-2010 1.39 In reply to

    • sgovoni
    • Top 10 Contributor
      Male
    • Joined on 10-18-2007
    • Posts 431
    • Points 6.940

    Re: Domanda execution plan

    sierrodc:
    è il mio primo post

    Benvenuto su UGISS Smile

    sierrodc:
    So che forse è una domanda semplice ma non riesco a capire bene di chi non fidarmi :)

    In generale, fidati solo delle soluzioni set-based Smile ed il codice (1) non lo è Smile

    Ciao!

    Sergio Govoni, SQL Server MVP | MVP Profile | Blog | Twitter |
    • Post Points: 5
Page 1 of 1 (5 items)
(C) 2007 User Group Italiano di SQL Server