Ho un problemino più che altro teorico, che però potrebbe diventare importante nel caso di database molto grandi, con tanti records.
Nel mio lavoro di sviluppatore questa situazione mi è già capitata diverse volte e, ritenendola di interesse generale, chiedo l'opinione di questo illustre forum.
Sto dividendo una stringa (composta dai nomi e dai codici degli utenti collegati a un sito) per creare un array, e devo confrontare ogni elemento dell'array con un database (per contare, tra gli utenti collegati, quelli autenticati)
Faccio:
Come si vede, creo la connessione e, all'interno del ciclo che scorre gli elementi dell'array, per ogni elemento interrogo il database estraendo solo il record che corrisponde alla query, creo e apro un recordset, controllo se è vuoto, e poi lo chiudo e lo distruggo. Alla fine chiudo la connessione.codice:Dim arrUtenti, i, utenti, aut arrUtenti = Split(Application("Utente"),"|") aut = 0 set objaut=Server.createobject("ADODB.Connection") objaut.ConnectionString = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" &Server.mappath("/mdb-database/crm.mdb") objaut.open for i = 0 to UBound(arrUtenti)-1 ' calcolo visitatori autenticati set rsaut = Server.CreateObject("ADODB.Recordset") sql="SELECT * FROM login WHERE login ='"&(arrUtenti(i))&"'" rsaut.open sql, objaut, 3, 3 if not rsaut.eof then aut = aut + 1 end if ... codice per presentare a video l'elenco degli utenti.... rsaut.close set rsaut = nothing Next ' visitatori totali in linea response.write ("Utenti connessi: "&i) response.write (" di cui autenticati: "&aut) objaut.Close Set objaut = Nothing
In alternativa si può fare un'unica query che estrae tutti i records, creando un unico recordset, e poi per ogni elemento dell'array scorrere tutto il recordset estraendo i record corrispondenti. Alla fine chiudere e distruggere il recordset e la connessione una volta per tutte.
Nel primo caso apro e chiudo il recordset tante volte quanti sono gli elementi dell'array, e poi devo limitarmi a controllare se è vuoto o no. L'elaborazione dei dati avviene a "livello del database", se così si può dire..
Nel secondo apro e chiudo il recordset una sola volta, ma per ogni elemento dell'array devo scorrere tutto il recordset alla ricerca di eventuali records che soddisfano la condizione. L'elaborazione dei dati avviene "al di fuori del database".
Qual' è il metodo migliore? O sono equivalenti?
Come si può fare un test attendibile?
Grazie a chiunque vorrà darmi un parere o un consiglio.......se non avrà niente di più serio di cui occuparsi.
:maLOL:

Rispondi quotando