Newsgroup: it.comp.appl.access
Titolo: Condizione "Where" in query che rallenta l'esecuzione

La query sottostante è legata alle due tabelle "tbl1011Anagrafica" e
"tbl2010Contatti", dove la prima ha circa 5.000 record e la seconda
parte da 5.000 e tenderà ad incrementarsi. Risulta molto lenta
nell'esecuzione. Credo che dipenda dalla parte "Where" che mi tira
fuori solo il record con l'ultima data "Visita".
SELECT tbl1011Anagrafica.RagSociale, tbl2010Contatti.Visita
FROM tbl1011Anagrafica INNER JOIN tbl2010Contatti ON
tbl1011Anagrafica.IDAnagrafica = tbl2010Contatti.IDAnagrafica
WHERE
(((tbl2010Contatti.Visita)=(DMax("[Visita]","tbl2010Contatti","IDAnagrafica
= " & [tbl1011Anagrafica]![IDAnagrafica])) And
(tbl2010Contatti.Visita)<(Date()+30)))
ORDER BY tbl2010Contatti.Visita;
Potete darmi qualche consiglio per renderla più veloce
nell'esecuzione?
Vi ringrazio
Paolo

 wrote in message 
news:1140773126.3...@i40g2000cwc.googlegroups.com...



[Risposta]
=======================================
Non credo sia il WHERE in sé quanto piuttosto il DMax()
che è dentro al WHERE.
Dovresti vedere di sostituirlo (il DMax()) con una subquery.
Ciao
Bruno 

Grazie Bruno,
ho qualche difficoltà però a realizzare la subquery. Potresti darmi
una mano per questo caso così da imparare questo metodo che, tra
l'altro, potrei adattarlo ad altre situazioni simili che ho?
Grazie
Paolo

 wrote in message 
news:1140777141.9...@i39g2000cwa.googlegroups.com...
Grazie Bruno,

Grazie
Paolo
[Risposta]
=======================================
Vedi di usare gli indicatori di messaggio altrimenti chi ti
risponde deve mettere in atto accorgimenti - come sto
facendo io - per distinguere domanda da risposta.
Una subquery è una normalissima Select Query che riporta
in uscita uno o più valori di un solo campo.
Nel nostro caso un solo valore - quello massimo - del
campo [Visita].
Premesso ciò, riporta nella griglia QBE le tabelle tbl2010 e tbl1011,
apponi i JOIN necessari (se già non vengono apposti
automaticamente), seleziona in output il solo campo
[Visita] e, ponendo le dovute condizioni (Criteria), vedi di
ottenere il valore massimo che ti interessa.
Fatto ciò riprendi in QBE la tua query originale e nei Criteria
di [Visita] riporta esattamente la stringa SQL della query
precedente, racchiusa fra parentisi tonde.
In luogo ovviamente del DMax(...) originale.
Ciao
Bruno

In luogo ovviamente del DMax(...) originale.
E' quanto sopra che dovrei inserire nei criteri della query in SQL
originale al posto del DMax?
Perchè, credimi, non so come...
Grazie ancora Bruno...
Paolo

 ha scritto nel messaggio
news:1140773126.3...@i40g2000cwc.googlegroups.com...



Ciao,
a meno che non abbia capito male sembrerebbe che la tua sia una normale
query di raggruppamento dove per ogni RagioneSociale vuoi ottenere l'ultima
data Visita.
prova così
----
SELECT tbl1011Anagrafica.RagSociale,
       Max(tbl2010Contatti.Visita) as MaxVisita
FROM tbl1011Anagrafica INNER JOIN tbl2010Contatti ON
tbl1011Anagrafica.IDAnagrafica = tbl2010Contatti.IDAnagrafica
WHERE tbl2010Contatti.Visita<(Date()+30)
GROUP BY tbl1011Anagrafica.RagSociale
ORDER BY Max(tbl2010Contatti.Visita)
----
Ciao
-- 
Giorgio Rancati
[Office Access MVP]

 wrote in message 
news:1140788391....@z34g2000cwc.googlegroups.com...
E' quanto sopra che dovrei inserire nei criteri della query in SQL
originale al posto del DMax?
Perchè, credimi, non so come...
Ma tu come fai le query?
Non le componi dalla griglia QBE?
Bruno 

---
Si, però usavo il DMax al posto del raggruppamento per renderla
aggiornabile e non statica, ma mi risultava molto lenta con numerosi
record (oltre 5.000). Il suggerimento di Bruno è la SubQuery dove mi
ricalcolo il valore max della data [visita] e la riporto nei criteri
della query, ma non riesco a capire come...
Grazie Giorgio
Paolo
Grazie Giorgio

Grazie Giorgio
Prego


 wrote in message 
news:1140790000.3...@i39g2000cwa.googlegroups.com...
Si, però usavo il DMax al posto del raggruppamento per renderla
aggiornabile e non statica, ma mi risultava molto lenta con numerosi
record (oltre 5.000). Il suggerimento di Bruno è la SubQuery dove mi
ricalcolo il valore max della data [visita] e la riporto nei criteri
della query, ma non riesco a capire come...
Ti rifaccio la domanda: come componi le tue query?
Via QBE o a "mano"?
Vera la seconda ipotesi, non saprei aiutarti.
"A mano" non faccio più niente... da un pezzo.
Bruno 

Si, grazie Giorgio è quello che mi se serviva e, devo dire, con
prestazioni di gran lunga migliori rispetto a prima...
Grazie ancora
Paolo

Le faccio quasi esclusivamente da QBE, a mano solo dei piccoli
ritocchi...
Comunque ti ringrazio per le logiche da attuare che poi credo siano
quelle state espresse da Giorgio...
Grazie ancora...
Paolo