Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    [VB.NET e SQL] PERFORMANCE IIS vs SQL

    Salve a tutti

    la questione è la seguente:

    devo eseguire 4 query che sommano un campo numerico,
    secondo voi è piu performante aprire 4 sqldatareader con il comando di SUM(nomecampo) o da codice asp.net aprire un singolo datareader scorrerlo con un while e sommare il campo in 4 variabili diverse usando 4 blocchi if ?

    saluti

  2. #2

    Re: [VB.NET e SQL] PERFORMANCE IIS vs SQL

    Originariamente inviato da SystemFailure
    Salve a tutti

    la questione è la seguente:

    devo eseguire 4 query che sommano un campo numerico,
    secondo voi è piu performante aprire 4 sqldatareader con il comando di SUM(nomecampo) o da codice asp.net aprire un singolo datareader scorrerlo con un while e sommare il campo in 4 variabili diverse usando 4 blocchi if ?

    saluti
    Eh?...

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970


    Sinceramente non ho capito nemmeno io.
    Sbagliare è umano, perseverare è diabolico.

  4. #4
    scusatemi se mi sono spiegato male... andavo di fretta

    in una pagina asp.net , devo creare dinamicamente una pagina riempiendo la table di risultati provenienti da un database sql.

    devo riempire ogni riga della table con un risultato proveniente da un calcolo di un campo nel database sql.
    per ricavare questo dato ho bisogno di eseguire la query sul db con 4 criteri diversi, facendo delle operazioni con il valore del campo.
    al momento, uso una sola query con un sqldatareader che scorro con un while e per decidere che operazioni eseguire, controllo il valore nel campo usando un blocco if - elseif con 4 condizioni.

    while objR.read

    if objR("Condiz") = "A" then
    myvar += objR("val")
    elseif objR("Condiz") = "B" then
    myvar -= objR("val")
    .....

    end while

    io mi chiedevo se è piu performante usare questo metodo o usare 4 query diverse specificando il criterio direttamente nella query ([condiz]= 'A') e usando il comando sql della somma (SUM(val)) per far eseguire il calcolo direttamente a sql.

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Dunque ho fatto una prova su un database SQL in rete in azienda in una Tabella contenente circa 42000 record, ovviamente i miei campi sono diversi è il risultato è stato:

    primo caso:

    codice:
     objCommand.CommandText = "SELECT * FROM Misurazioni
                objCommand.CommandType = CommandType.Text
    
                Dim countTime As Long = System.Environment.TickCount
                objConnection.Open()
                Dim reader As System.Data.SqlClient.SqlDataReader = objCommand.ExecuteReader()
                Dim myVar1 As Integer
                Dim myVar2 As Integer
                Dim myVar3 As Integer
    
    
                While reader.Read
                    If reader("Turno") = 1 Then
                        myVar1 += reader("Turno")
                    ElseIf reader("Turno") = 2 Then
                        myVar2 += reader("Turno")
                    ElseIf reader("Turno") = 3 Then
                        myVar3 += reader("Turno")
                    End If
    
                End While
    
                countTime = System.Environment.TickCount - countTime
    Tempo medi 1540 ms

    Secondo caso:
    codice:
      objdatadapter.SelectCommand = New SqlCommand
                objdatadapter.SelectCommand.Connection = objConnection
            objdatadapter.SelectCommand.CommandText = "SELECT SUM(turno) FROM Misurazioni WHERE turno=1;SELECT SUM(turno) FROM Misurazioni  WHERE turno=2;SELECT SUM(turno) FROM Misurazioni  WHERE turno=3"
             
            Dim countTime As Long = System.Environment.TickCount
    
            objConnection.Open()
            objdatadapter.Fill(objdataset, "misure_ricette")
            objConnection.Close()
    
            Dim myVar1 As Integer
            Dim myVar2 As Integer
            Dim myVar3 As Integer
            myVar1 = objdataset.Tables(0).Rows.Item(0).Item(0)
            myVar2 = objdataset.Tables(1).Rows.Item(0).Item(0)
            myVar3 = objdataset.Tables(2).Rows.Item(0).Item(0)
    
    
            countTime = System.Environment.TickCount - countTime
    Tempo medio 343 ms.
    Sbagliare è umano, perseverare è diabolico.

  6. #6
    Utente di HTML.it L'avatar di albgen
    Registrato dal
    Jun 2005
    Messaggi
    3,249
    ma, creare una vista ad hoc per questo ti pare brutto?
    tu prova con una vista e vedrai che i tempi sarano praticamente vicini allo zero.
    I got the remedy

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Originariamente inviato da albgen
    ma, creare una vista ad hoc per questo ti pare brutto?
    tu prova con una vista e vedrai che i tempi sarano praticamente vicini allo zero.
    Probabilmente, io mi sono attenuto al rispondere alla domanda del nostro amico, non conoscendo le sue esigenze al livello di applicazione.

    Potrebbe anche essere comodo e forse più veloce ancora scrivere nel database di volta in volta i quattro valori calcolati nel momento in cui si modificano i campi interessati e andarli leggere con una semplice query senza stressare il motore del database......
    Dipende......!
    Sbagliare è umano, perseverare è diabolico.

  8. #8
    Utente di HTML.it L'avatar di albgen
    Registrato dal
    Jun 2005
    Messaggi
    3,249
    Originariamente inviato da Pirelli72
    Probabilmente, io mi sono attenuto al rispondere alla domanda del nostro amico, non conoscendo le sue esigenze al livello di applicazione.
    Ciao Pirelli,

    guarda che non è una critica nei tuoi confronti.
    Stò cercando di farli capire che quella dei calcoli a livello applicazione non è una buona pratica. Adesso le righe sono 40.000 e i tempi 0.3sec, ma quando diventeranno 400.000 i tempi grosso modo dovrebbero essere intorno ai 3 secondi.
    Per non parlare del carico di lavoro di sql-server ogni volta che gli vengono chiesti questi dati.

    Quindi, se si riesce a farglielo fare al DBMS è sempre preferibile quest'ultimo per fare calcoli, ovviamente dove è possibile.

    I got the remedy

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Scusami , nel frattempo avevo modificato il post precedente.

    guarda che non è una critica nei tuoi confronti.
    Figurati, io sono qui per imparare.
    Sbagliare è umano, perseverare è diabolico.

  10. #10
    Utente di HTML.it L'avatar di albgen
    Registrato dal
    Jun 2005
    Messaggi
    3,249
    Originariamente inviato da Pirelli72
    Figurati, io sono qui per imparare.
    come tutti
    I got the remedy

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.