Newsgroup: it.comp.appl.access
Titolo: Query troppo lenta

Salve a tutti, ho un problema piuttosto serio...
premetto che lavoro in una software house per la quale un
programmatore, che adesso se n'è andato, ha creato delle applicazioni
gestionali (carico scarico magazzino fatture note credito inventari
etc..);
adesso io devo risolvere i casini che sono sorti nell'utilizzo
intensivo da parte degli utenti di queste applicazioni, e uno di questi
problemi è l'eccesivo tempo di esecuzione di una query che ricava le
giacenze di un articolo o di un intervallo di articoli, tenendo dei
movimenti di carico - scarico.
Tenete conto che ci sono c.a.19.000 articoli e c.a. 4.000 movimenti...7
minuti per una query mi sembrano comunque troppi!
Qualche consiglio a chi ha già in passato avuto e risolto problemi
simili?
Ecco lo schema delle tabelle interessate:
tab movimenti uno a molti con tabella capi x movimento, cioè il
dettaglio movimenti (è un negozio di abbigliamento) a sua volta legata
ad una tabella dei  bar code molti ad uno
la query per le giacenze si basa a sua volta su un' altra query.
capisco che forse non sono stato abbastanza dettagliato, in caso posso
ovviare, ma qualcuno può aiutarmi?
Grazie anticipatamente ed un saluto a tutto il newsgroup.
Massimiliano

[omissis]
Credo che per analizzare il problema di lentezza sia basilare vedere il codice 
della query, e anche quello della query annidata.
--
PBsoft di Gabriele Bertolucci
www.pbsoft.it
skype: pbsoftsolution


ciao, complimenti per il nome.
guarda su 
www.Accessgroup.it
 sez. approfondimenti "gestione di un magazzino"
Trovi la tecnica delle subquery
E' cmq un problema di indici, come stai messo ad indici?
-- 
_ _
Ciao
MAssimiliano Amendola            
www.accessgroup.it
Cisa - Conferenza Italiana per Sviluppatori Access
Info:  
www.donkarl.com/it

Grazie, per tutto...
Beh.. con gli indici?
Si ho dato un'occhiata..a prima vista maluccio...ma dimmi..in realtà
cosa conviene indicizzare?
Ci sono controindicazioni nell'indicizzare troppo?
Posterò a breve il codice delle query per agevolare chi potrebbe
aiutarmi.
Grazie a tutti.
Saluti.

Ecco il codice della query giacenze:
SELECT CapixMov.idBarCode, Sum(IIf([segno]='+',[Qu02],0)) AS QuAcq,
Sum(IIf([segno]='-',[Qu],0)) AS QuVend, ([QuAcq]-[QuVend]) AS giacenza,
Query_Movimenti.IdDeposito,
IIf(IsNull([Barcode1]),[Barcode2],[Barcode1]) AS BCode
FROM BarCode INNER JOIN (CapixMov INNER JOIN Query_Movimenti ON
CapixMov.idMov = Query_Movimenti.Id) ON (BarCode.Id =
CapixMov.idBarCode) AND (BarCode.Id = CapixMov.idBarCode)
GROUP BY CapixMov.idBarCode, Query_Movimenti.IdDeposito,
IIf(IsNull([Barcode1]),[Barcode2],[Barcode1]);
e questo è il codice della subquery "Query_Movimenti":
SELECT Movimenti.datamov, Movimenti.Id, Movimenti.datadoc,
Movimenti.ndoc, Movimenti.IdCliFor, Movimenti.idtipo, TipoMov.tipo,
TipoMov.segno, Movimenti.note, Movimenti.IdDeposito,
Movimenti.IdCondPagamento, TipoDoc.TipoDocumento
FROM TipoMov INNER JOIN ((Movimenti LEFT JOIN TipoDoc ON
Movimenti.IdTipoDoc = TipoDoc.IdTipoDoc) LEFT JOIN Documenti ON
TipoDoc.IdTipoDoc = Documenti.IdTipoDoc) ON TipoMov.id =
Movimenti.idtipo
WHERE (((TipoDoc.TipoDocumento)="Fattura accompagnatoria" Or
(TipoDoc.TipoDocumento)="Carico Inventario" Or
(TipoDoc.TipoDocumento)="BOLLA" Or (TipoDoc.TipoDocumento) Is Null Or
(TipoDoc.TipoDocumento)=""))
ORDER BY Movimenti.datamov, Movimenti.Id, Movimenti.datadoc;
Ho provato ad indicizzare i campi più soggetti a ricerche..ma i
risultati non cambiano, ci vogliono i soliti 5 - 7 minuti per
l'esecuzione della query!!!
Help me please.
Grazie anticipatamente a tutti.
Saluti.