Newsgroup: it.comp.lang.visual-basic
Titolo: Ordinamento query access

Salve a tutti, debbo eseguire da programma una query su una tabella con
quasi un milione di record.
Il db è access e sto usando ado.
Se uso il cursore lato server e nessun ordinamento i tempi sono accettabili,
però a me i record servono ordinati.
Ho provato a mettere l'indice sul campo secondo il quale voglio ordinare ma
non funziona, avete qualche idea?
Grazie.

 ha scritto nel messaggio
news:c3ovgi$2995vk$1...@ID-186564.news.uni-berlin.de...

non ho ben capito, cosa vuol dire "non funziona?"
non sono ordinati o i tempi non sono accettabili?
per ordinare dei record, basta che nella SELECT aggiungi la clausola ORDER
BY in fondo, seguita dal nome del campo che vuoi ordinare......(seguito
eventualmente da DESC se vuoi ordinare in modo decrescente)......
mettere l'indice sul campo non basta, al massimo velocizza l'ordinamento, ma
nulla di più.....
facci sapere, good coding!!!
-- 
Alletun
"Io lo so che accadrà. La voce sussurra nei miei pensieri di Jair, Rone,
Allanon e soprattutto nelle Mortombre.
Sussurra segreti che mi sono tenuti nascosti, nella grigia oppressione
di questo giorno e nell'oscurità caliginosa di quello che mi aspetta.
Saremo distrutti. Tutti."
Brin Ohmsford - La Canzone di Shannara - T. Brooks

 facci sapere, good coding!!!
questo lo so, ma con l'ordr by i tempi diventano apocalittici........
Grazie, ciao.

 questo lo so, ma con l'ordr by i tempi diventano apocalittici........
Puoi anche usare un group by chiave_univoca, ma è ancora peggio.
Ciao
Alberto

 Grazie, ciao.
guarda che la cosa più efficiente che puoi fare, IMHO, è quello di usare
l'ORDER BY. Se i tempi diventano apocalittici, è perchè usi Access, hai una
tabella con un milione di record e usi ADO......;-))
l'order by che ti ho detto di usare demanda al motore del database
l'ordinamento, e teoricamente dovrebbe essere la cosa più efficace che puoi
fare.
A questo punto, credo, ti consiglio di descrivere meglio la struttura della
tabella (elenco dei campi) e di postare il codice che apre il recordset per
vedere di capire meglio.....


 usare?
rs.index="Descrizione"

 può cambiare di volta in volta.
appunto io volevo proprio sfruttare questo ordinamento di default per farmi
tornare
l'ordinamento che mi interessa e che sarà sempre lo stesso.
Pensavo che fosse possibile perchè se tolgo tutti gli indici dalla tabella
anche la chiave primaria e
lascio solo quello sul campo che mi interessa il recordset è effettivamente
ordinato e l'apertura è veloce.
Però la chiave non posso toglierla dovrei solo dire al db di ignorarla
nell'ordinameto, ma se mi dite che non
si può fare pazienza.....


Mah!
......2 COSE,,,,
1) se usi access e solo access e non sei via web.....DAO è più performante!
Si sà... inutile negarlo!
2) Se una query filtra un milione di record un po di tempo lo impiega...ma
non tempi geologici!
...a meno che.....data la struttura di access...
a) HD molto frammentato
b) Poca RAM
c) CPU P166 mmx
ma non è il tuo caso no?
e allora? ...allora guarda come fai la query:
....ci sono tabelle collegate...integrità da rispettare...group by ...campi
calcolati?
per me è un problema di ottimizzazione del db o della query
come ti han detto un ORDER BY è la cosa più veloce .
pprova a postare la query incriminata
facci vedere che combini!
-- 
Il Wodkino Nazionale è a : 
www.martek.it
Pagina Vb/Bestiario/Lamer Experience :
http://www.martek.it/go.asp?portamia=2
 New Entry nel bestiario!
:-)

 si può fare pazienza.....
Si può fare, ma c'è un lavoro aggiuntivo per il motore, che deve ordinare i
dati prima di restituirteli.
Quindi, le performance ne risentono.
Ciao
Alberto

 si può fare pazienza.....
UH UH UH UH!!!!!!!!
ora parte la bacchettata sulle dita!!!!!
SELECT IDcode, Nome ,cognome FROM Anagrafica ORDER BY Cognome
IDcode è la primary key
secondo te mi riporterà
0001 Andrea Defotis
0002 Sandro Amicis
oppure
0002 Sandro Amicis
0001 Andrea Defotis
???????
SPLAT BACCHETT BACCHETT!!!!


 ha scritto nel messaggio
news:CgU7c.89525$z23.3...@news3.tin.it...

avevo premesso che non volevo usare l'order by......

 Non credo sia quello che vuoi.
io avevo pensato che se non ha criteri il motore del db ti restituisce i
record seguendo l'ordine "naturale" con cui sono stati inseriti nella
tabella,
potrebbe essere?

 ha scritto nel messaggio
news:TbU7c.89498$z23.3...@news3.tin.it...

La query è una semplice "Select codice, descrizione from tabella", forse ho
esagerato nel descrivere i tempi di caricamento, se aggiungo l'order by sul
campo descrizione comunque sono nell'ordine di due secondi, il fatto è che
mi intrigava l'idea di fare la "furbata" di avere i record ordinati per il
campo descrizione senza farlo esplicitamente....
Quindi va bene anche cosi.
Grazie a tutti per l'aiuto.

 potrebbe essere?
Ma neanche per sogno.
Esiste un ordine 'naturale', che spesso coincide con quello di inserimento,
ma non č detto.
Il motore, se tu non gli imponi un ordine (ad esempio mediante order by) in
fase di estrazione, puň estrarti i dati nell'ordine che gli pare, e
quest'ordine viene scelto in base a tante cose *sue*, tipo la
frammentazione, eventuali indici piů o meno comodi, ecc...
Quindi, se fai un Select * senza Order By, oggi ti restituisce i record in
un ordine, domani puň avere cambiato tale ordine (pensa solo agli
stravolgimenti di clusterizzazione che puň comportare un semplice Compact).
Del resto, il motore potrebbe anche decidere di inserire i record nuovi 'in
mezzo' ai vecchi, se ci sono buchi liberi. Tu non ti devi curare di come il
motore gestisca l'archiviazione della roba. Devi solo ricordarti di
specificare sempre un ordine di estrazione, se l'ordine č rilevante ai fini
applicativi.
Ciao
Alberto

 avevo premesso che non volevo usare l'order by......
Dici? Dove, per favore?
O dai semplicemente per scontato che una query non ammetta l'Order By?

 ha scritto nel messaggio
news:c3pe6v$296bcb$1...@ID-174464.news.uni-berlin.de...

scusa, nel primo post in effetti avevo dimenticato di precisare che l'order
by volevo ometterlo nel tentativo di velocizzare la query.
Ciao.

 Grazie a tutti per l'aiuto.
Prego....ma se ti chiamo LAMER ti offendi????????????
Lupo?!...parti con il ritornello!!!
ROTFL
-- 
Il Wodkino Nazionale č a : 
www.martek.it



no affatto!.