Newsgroup: it.comp.appl.access
Titolo: Prestazioni Access (il ritorno...)

ieri si è aperta una discussione mastodontica su access, casomai non ve ne
foste accorti :-)
alla fine c'era chi diceva di fare un pò d prove per vedere cosa succede, il
traffico in rete, se diminuisce con una query, se si ottimizza e un pò di
altre cose.
nel mio piccolo, ho fatto questa prova (tanto per passare un pò il tempo):
client: a97 sr2  su w2kpro sp3
server: nt40sp6 (senza access)
-BE con unica tabella (tbl_test) con 3 campi
    ID (autonumber)
    Breve (testo 10)
    Lungo (testo 50)
ID è chiave primaria della tabella. gli altri campi non sono indicizzati
ho popolato la tabella con questa routine:
Public Function RiempiTabella()
    Dim rst As Recordset
    Dim strBreve As String
    Dim strLunga As String
    Set rst = CurrentDb.OpenRecordset("tbl_test")
    Dim i As Long
    strBreve = "hdystwlsod"
    strLunga = "hdystwlsodhdystwlsodhdystwlsodhdystwlsodhdystwlsod"
    For i = 1 To 1000000
        rst.AddNew
        rst!breve = strBreve
        rst!lungo = strLunga
        rst.Update
    Next i
    rst.Close
    Set rst = Nothing
End Function
(il testo inserito non è sensato, ma non dovrebbe creare problemi, giusto?)
-FE vuoto, con la sola routine per fare le prove e la tabella collegata.
    la tabella era collegata direttamente attraverso la share, non tramite
una condivisione mappata come unità locale.
Sub prova()
    Dim rst As Recordset
    Set rst = CurrentDb.OpenRecordset(strOrigineDati)
    rst.MoveLast
    rst.Close
    Set rst = Nothing
End Sub
dove ovviamente strOrigineDati va di volta in volta sostituita con la
stringa appropriata.
come monitor di rete, ho usato l'iconcina di win2k, su cui vengono riportati
i pacchetti trasmessi e ricevuti. le mie misure, sono quindi in pacchetti,
non in bytes (non avevo voglia di fare i conti...)
di seguito a ogni impostazione per la stringa di origine dati, trovate il
valore dei contatori dopo aver eseguito la routine di prova.
ho fatto attenzione (ovviamente) a non avere attivi programmi che generano
traffico a caso o altre cazzatine che potessero falsare la prova
contatori iniziali:
in  28433
out 18390
strOrigineDati="tbl_test"
in  34447
out 21922
strOrigineDati="SELECT * FROM tbl_test WHERE ID>900000;"
in  35160
out 22359
strOrigineDati="tbl_test"
(ho rifatto la prova. vai a sapere che magari c'entra qualche cache...)
in  41174
out 25891
strOrigineDati="SELECT * FROM tbl_test WHERE Breve Like 'h*';"
in  94872
out 57240
da quello che mi salta fuori, pare che usare dei filtri sia effettivamente
più efficiente, in termini di dati trasferiti, quando si esegue una query su
campi indicizzati.
se però non ho un indice, il discorso cade...
quando infatti ho usato la clausola like, il numero di record da far passare
per arrivare in fondo e cmq 10^6, dato che tutti soddisfano la query, solo
che per qualche motivo in rete vengono fatti passare molti più dati rispetto
al caso in cui scelgo semplicemente la tabella.
pare che vengano scaricati in locale tutti i dati,dato che in rete passa una
quantità di dati (~55k packets) quasi pari a quella necessaria alla copia
del db tramite so (~60k packets)
se qualcun'altro ha voglia di fare la prova con versioni successive di
access...
:-)
--
+-----
| Paolo opg
|
| janickg ( at ) hotmail ( dot ) com
+-----
---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (
http://www.grisoft.com
).
Version: 6.0.427 / Virus Database: 240 - Release Date: 06/12/2002

 access...
io ho fatto le stesse prevo con AXP (vedi i miei post nel 3d precedente).
Ho ottenuto i medesimi risultati.
Ciao
Sib

 [...]
Scusate se mi intrometto, ma la cosa mi interessa molto: pero' secondo me la
prova che hai fatto e' parzialmente fuorviante...
Penso che a quei 3 campi debba essere aggiunto un altro campo, diciamo
Num(Intero lungo) NON indicizzato e magari contenente gli stessi valori del
campo ID.
Quindi, la terza prova che hai fatto con:
strOrigineDati="SELECT * FROM tbl_test WHERE Breve Like 'h*';"
la farei con
strOrigineDati="SELECT * FROM tbl_test WHERE Num>900000;"
in modo da poterla confrontare direttamente con
strOrigineDati="SELECT * FROM tbl_test WHERE ID>900000;"
in quanto l'istruzione "like" potrebbe essere l'artefice del grosso ritardo.
Ti chiedo per favore di provare in questo modo (non perche' non mi va, ma
perche' sicuramente fai prima di me che ora ho la rete un po' incasinata...)
e farci sapere quanto prima.
Grazie
Claudio

 campo ID.
Se leggi i miei post precedenti vedrai che ho fatto esattamente cosi'.
i risultati li trovi nei miei post stessi.
Sib