Problema di performances con DB access

mercoledì 10 agosto 2005 - 20.39

sarto76 Profilo | Junior Member

Ciao a tutti vi spiego il mio problema.
Ho un programma che, dopo aver fatto diverse query su DB inserisce 150 record nel DB (è un questionario, guardo dove ci sono errori e li inserisco).
Prima avevo tutto su DB mysql, per fare tutte queste procedure ci metteva circa 2 secondi (utilizzavo mysql ODBC 3.51).
Ho trasportato tutto su DB access (utilizzo Microsoft.Jet.OLEDB.4.0) e ci mette circa 40 secondi.
è possibile che ci sia una differenza tanto marcata?

Se sì qualcuno saprebbe darmi un alternativa ad access? ce l'ho bisogno perchè voglio distribuire il mio programma, e non volevo che ognuno dovesse installarsi mysql apposta...

Grazie a tutti

sarto76 Profilo | Junior Member

Aggiungo il mio oggetto per le select che viene richiamato ogni volta:

public DataSet getDati(string query)
{

OleDbConnection myConnection = new OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=D:\\SLc&p\\Database\\SLc&p.mdb;");


OleDbCommand myCommand = new OleDbCommand(query,myConnection);
OleDbDataAdapter myDataAdapter=new OleDbDataAdapter();
myDataAdapter.SelectCommand=myCommand;
DataSet myDataSet= new DataSet();
myConnection.Open();
try
{
myDataSet.Clear();
myDataAdapter.Fill(myDataSet);
myConnection.Close();
}
finally
{
myConnection.Close();
}
return myDataSet;
}



LudovicoVan Profilo | Junior Member

>Ho un programma che, dopo aver fatto diverse query su DB inserisce
>150 record nel DB (è un questionario, guardo dove ci sono errori
>e li inserisco).
>Prima avevo tutto su DB mysql, per fare tutte queste procedure
>ci metteva circa 2 secondi (utilizzavo mysql ODBC 3.51).
>Ho trasportato tutto su DB access (utilizzo Microsoft.Jet.OLEDB.4.0)
>e ci mette circa 40 secondi.
>è possibile che ci sia una differenza tanto marcata?

Bisognerebbe vedere la procedura per fare valutazioni in merito.


>qualcuno saprebbe darmi un alternativa ad access? ce l'ho
>bisogno perchè voglio distribuire il mio programma, e non volevo
> che ognuno dovesse installarsi mysql apposta...

Anche Access va installato (se non c'è) e, a differenza di MySql, la licenza ha un certo costo. In generale, qualunque motore di database tu scelga, occorrerà istallarlo sulla macchina target, a meno che non fai un'applicazione che sfrutta un meccanismo tutto custom, tipo leggere e scrivere da file XML... sempre se ne vale la pena.

Comunque, giusto la mia opinione.

Curioso di vedere la procedura, se possibile... -LV

(Peace X Love] = [1)

Amodio Profilo | Expert

40 secondi è esagerato

rispondi a questo:

1) hai qualche indice nelle tabelle (gli indici rallentano gli insert e update)
2)che driver usi oledb o odbc (oledb è piu performante per access)
3) quante colonne susi per la insert( se si tratta di 100 o piu mi sa che è qui il problema,ed poi dipende anche dal tipo di dati, se usi un blob->note in access e ci metti un sacco di roba ...)


sarto76 Profilo | Junior Member

Provo ad inviare la procedure, ci sono alcuni commenti ma non so se sarà tutto chiaro.
Ci sono 50 domande con 3 possibili risposte, la procedura inserisce le 150 risposte dell'allievo e poi, controlla se sono giuste o sbagliate...

Per quanto riguarda le altre domande:
-non ho nessun indice
-utilizzo oleDB
- non inserisco campi con 150 colonne... al max una decina...

Altra domanda... o conferma... allora se qualcuno volesse utilizzare il mio programma dovrebbe avere MS access installato? non basterebbe un file per potersi connettere, tipo il Framework per DotNet??

Grazie mille per le risposte che mi avete dato
ciao Massimo

LudovicoVan Profilo | Junior Member

> Provo ad inviare la procedure

Ho guardato la procedura ed effettivamente mi sembra che ci sia spazio per parecchio lavoro di normalizzazione e semplificazione, a partire dalla struttura del db fino ad arrivare alla procedura in questione.

Mentre cerchi un programmatore esperto in grado di ristrutturare il tutto*, puoi comunque provare a creare indici per tutte le varie chiavi e già dovresti avere un certo aumento di prestazioni.

> Altra domanda... o conferma... allora se qualcuno volesse utilizzare il mio programma dovrebbe avere MS access installato? non basterebbe un file per potersi connettere, tipo il Framework per DotNet??

Sì, in effetti basta il cosiddetto Runtime di Access. Puoi trovare info qui: http://msdn.microsoft.com/library/en-us/modcore/html/deovrdeployingaccesssolutions.asp

Ciao. -LV

* Di questa "ristrutturazione" posso dirti che richiederebbe: 1) un minimo di analisi per risalire a cosa esattamente l'applicativo deve fare, 2) la ristrutturazione (semplificazione) del database, 3) la riscrittura (semplificazione) di tutte le query, 4) la semplificazione delle procedure. Nel complesso comunque non dovrebbe richiedere più di qualche giorno di lavoro, sempre se il sito non è enorme...


(Peace X Love] = [1)

sarto76 Profilo | Junior Member

grazie mille per le informazioni...
Il problema resta comunque... come mai con mysql questa procedura viene fatta in 5 secondi ed adesso ce ne mette 40? Ho provato ad inserire alcuni indici, come li avevo nel db mysql ma non cambia nienrte......

Grazie ciao

LudovicoVan Profilo | Junior Member

>grazie mille per le informazioni...
>Il problema resta comunque... come mai con mysql questa procedura
>viene fatta in 5 secondi ed adesso ce ne mette 40? Ho provato
>ad inserire alcuni indici, come li avevo nel db mysql ma non
> cambia nienrte......

Per gli indici e su come ottimizzare purtroppo non so che dirti, non sono un esperto di Access.

Sul fatto che la procedura ci mette tanto di più, in effetti Access è in media un po' più lento di MySql (lo dicono i benchmark), ma anche se la differenza non è grandissima, la devi poi moltiplicare per tutti i loop e gli annidamenti che fai...

-LV

(Peace X Love] = [1)
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5