Newsgroup: it.comp.software.database
Titolo: Query un po' lente

Salve a tutti,
ho un problema di velocita' su una query e non so proprio da che parte
cominciare...
C'e' un Database contenente circa 600.000 records, ma una volta
completata l'importazione saranno 3.500.000 con aggiornamenti
settimanali di 30.000 records (una libreria).
Tutto il sistema gira su un PIII 1000 con 512mb di ram e tre hard disk
da 40Gb l'uno.
La durata delle query, in media, si aggira intorno ai 3-4 secondi
(modestamente) tranne in un caso:
SELECT COUNT(*) FROM tabella_dei_libri WHERE
CONTAINS(materia,'"<bic>codice della materia</bic>"')
Ossia quando viene effettuata una ricerca per contare (e solo in quel
caso) i record su una query Full Text (campo indicizzato sotto un
catalogo Full Text), la prima volta che questa query viene inviata PUM!
Se ne partono anche un paio di minuti, la seconda volta che richiamo la
stessa query occorrono un paio di secondi, ma solo se il server e'
impegnato anche in altre attivita', altrimenti e' istantaneo.
Ovvio, e' in cache.
Non posso suddividere il campo delle materie in piu' campi: ci sono
libri che possono avere anche 20 materie, non posso fare un collegamento
da "molti a molti", poiche' commerce server 2000 non gestisce le tabelle
normalizzate (forse la versione 2002, ma visto il costo di 1 licenza...)
una cosa che avevo pensato era aumentare la persistenza delle query in
cache, ma non so proprio dove sbattere la testa: i manuali tacciono al
riguardo, o se c'e' una soluzione e' ben nascosta.
AIUTO!
Andrea
PS: le materie impiegano la classificazione BIC (Book International
Classification) e sono scritte in XML quindi <BIC>A</BIC>, ad esempio,
indica l'arte; un applicazione che entra in funzione durante la
trasformazione dell'XML della pagina, quando incontra il tag <BIC>
prende il codice (che e' univoco) e lo traduce (in base ad un dizionario
caricato dal global.asa) al volo, in modo da mostrare il nome esatto di
ogni materia nella lingua scelta dall'utente.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Alura, una soluzione (a volte mi domando cosa fa la gente durante i fine
settimana invece didormire... mah)
e' usare la funzione CONTAINSTABLE.
select COUNT(*) from CONTAINSTABLE(nomedellatabella, nomecampo,
'"<BIC>YF</BIC>"')
Se adesso qualcuno fosse tanto gentile da dirmi perche' impiega 4
secondi
mentre
select count(*) from nomedellatabella WHERE CONTAINS(nomecampo,
'"<BIC>eccetera</BIC>"')
ne richiede piu' di 30 per essere eseguita mi farebbe un ENORME piacere.
Baci
Andrea


 secondi
[..]
Probabilmente e' questo il modo di usare gli indici di un campo full-text.
Infatti mi chiedevo a che diavolo servissero i campi full-text, visto che
non avevo capito il senso dell'indice. Cosi' il tutto ha una sua logica.
Quack
-------------------------------------------------------
Messaggio inviato da 
http://www.sandlab.org/newsgroup/
Accesso gratuito via web ai Newsgroup

 Quack
i campi Full Text non possono essere indicizzati normalmente e c'e' un
"motore a parte" che se ne preoccupa.
Pero' tanto Contains quanto Containstable vanno a sfrugugliare la'
dentro.
Perche' Contains ci mette 10 volte il tempo che impiega Containstable?
Ciau


 Perche' Contains ci mette 10 volte il tempo che impiega Containstable?
Bho. Bisognerebe leggere "Inside SQL Server 2000" per capire (forse).
Personalmente possiedo solo la copia relativa alla versione 7.
Saluti e ripaperi
