Newsgroup: it.comp.www.asp
Titolo: Help!!! Troppi risultati!

Ciao a tutti...
Ecco un bel gratta capo che spero riusciremo a risolvere, visto che da solo
non ci sono riuscito...
Mi trovo a fare un mega motore di ricerca su di un database Access2000 delle
dimensioni di oltre 600mb con oceani di informazioni...
Dopo aver abbandonato le ricerche semplici, ho creato la ricerca per parola
chiave, migliorando notevolmente le ricerche (non so in % di quanto, ma la
velocità e' cambiata drasticamente!)...
Attualmente, prima di ricercare e visualizzare l'oggetto in se stesso,
vengono cercate le parole chiavi inserite dall'utente e poi ricercate su di
una tabella che contiene la parola chiave e il codice dell'oggetto
corrispondente, si intende che ogni oggetto può avere più parole chiavi NON
duplicate...
Una volta effettuata la ricerca per parole chiave, si effettua una "cernita"
fra i risultati e si prendono solo quelli con TUTTE le parole chiavi
presenti, dopo di che, i codici dei libri così ricavati, vengono scritti in
una tabella temporanea.
Dopo queste operazioni, si effettua un semplice "filtro" fra l'elenco degli
oggetti e la tabella temporanea che contiene i codici degli oggetti da
visualizare...
Il mio problema sta' proprio in quest'ultima operazione...
Per prima cosa la query che effettuo e' la seguente:
"SELECT TMP.CODICE, TMP.USER, CLASSIFICATORE.OGGETTO FROM (CLASSIFICATORE
INNER JOIN TMP ON CLASSIFICATORE.CODICE = TMP.CODICE) WHERE (NRRIF = " &
CODICE_UTENTE & ") ORDER BY OGGETTO"
E' logico che la query e' estremamente più grande fra campi richiesti, inner
e join, ma dopo il where il tutto e' uguale...
Per sapere quanti sono i campi trovati, utilizzo la stessa query, solo che
utilizzo il count:
"SELECT COUNT(CLASSIFICATORE.OGGETTO) as rsTot FROM (CLASSIFICATORE INNER
JOIN TMP ON CLASSIFICATORE.CODICE = TMP.CODICE) WHERE (NRRIF = " &
CODICE_UTENTE & ")"
Dapprima eseguivo entrambe le query e poi controllavo se rsTot era maggiore
del numero massimo di risultati, ma questo faceva perdere molto tempo in
caso di un numero elevato di risultati, poi ho usato un trucco, quello di
controllare rsTot prima di fare la query per avere i risultato (Cioè, faccio
prima la query con il count, poi controllo se rsTot e' minore del numero
massimo di risultati, se lo e' faccio la seconda query, se no esco), questo
mi ha fatto risparmiare un po' di tempo, ma non basta...
Non esiste un comando (anche in SQL magari, visto che voglio migrare) che
limiti il numero massimo di dati presenti nel recordset?
Cioè, mentre sta' scansendo il DB ed inserisce i risultati nel RecordSet, li
conta e non appena arriva al numero massimo interrompe la ricerca dando
l'errore...
Spero vivamente di si...
....Se no si accettano suggerimenti :P
Ciao ;^)=
PS: Scusate l'enormità della mail...
--
Massimo "Red Foxy" Ciccio'
Home Page: 
http://www.redfoxy.go.to/
ICQ: 65721997
Fax: 1782217407
http://www.intelliad.com/?244F5F07
 <-- Iscrivetevi subito!!!
..o0 Dentro ognuno di noi c'e' un animale, sta' a noi scoprirlo e domarlo 0o.

 limiti il numero massimo di dati presenti nel recordset?
"SELECT TOP 10 FROM TABELLA" prende i primi 10 record.
Comunque, per velocizzare notevolmente le prestazioni del DB (e rendere i
dati un po' piů sicuri...), prendi in seria considerazione queste (buone)
azioni da compiere:
1) Se una tabella, in fase di query, viene tirata su sempre ordinata secondo
lo stesso campo (esempio, "Oggetto"), elimina gli "ORDER BY Oggetto" e
modifica (o crea se non l'hai ancora fatto) l'indice da semplice in
"Clustered".
2) Passa almeno ad SQL Server 7
3) Utilizza, per l'inserimento dei dati nelle tabelle temporanee, una Stored
Procedure, che (a differenza delle Queries SQL) č compilata nel database e
va solo richiamata. E lei va! Zap!
Romeo_


Cioe'????
Utilizzare le query internet del DB Access?
Se intendi questo, non mi e0' possibile, visto che la query cambia sempre di
forma (ad ogni ricerca quasi...)
