Visualizzazione dei risultati da 1 a 6 su 6

Discussione: Full-text lenta

  1. #1

    Full-text lenta

    Ciao,
    ho creato un catalogo full text su un database con circa 200k record.
    Il motore è MSSQLServer 2000.
    Quando effettuo una ricerca e il termine viene trovato la ricerca è velocissima, ma quando cerco un termine che non è presente ci mette troppo tempo per dirmi che non esistono record con il termine cercato.
    Come posso risolvere il problema?

  2. #2
    Utente di HTML.it L'avatar di Gioba66
    Registrato dal
    Jun 2002
    Messaggi
    2,189
    strano...
    hai già guardato il piano di esecuzione della query?
    Tutti vogliono parlare, nessuno sa ascoltare.

  3. #3
    Ho visto il piano di esecuzione della query.

    La query comprente un join tra 3 tabelle, solo una di queste contiene i campi in cui ricercare.

    Dal piano di esecuzione si può dedurre che se nella tabella con i campi da ricercare è presente almeno un record, parte da quel risultato per fare il join con le altre tabelle.
    Mentre se non trova risultati prima fa il join tra le altre tabelle, poi con la tabella dove fare la ricerca, per poi non trovare risultati.

  4. #4
    Ho risolto parzialmente il problema, togliendo un left aouter join (inutile) da una delle tabelle.

    Ma ora:

    Se sono ad un certo livello nel mio applicativo, la query di ricerca contiene filtraggi (clausola where), per ogniuna delle 3 tabelle, quì tutto bene.

    Mentre in un altro livello la query contiene filtraggi solo per 2 di queste tabelle, qui sorgono ancora problemi di lentezza.
    Il piano di esecuzione della query evidenzia ancora il merge tra le due tabelle non full text prima di eseguire il merge con la full text.

    Suggerimenti?

  5. #5
    Ho risolto creando al volo uno script t-sql che fa il controllo se sul catalogo full text esistono reocord che rispettano i parametri di ricerca, in caso di esito positivo esegue la query e ritorna il recordset richiesto

  6. #6
    Vi aggiorno,

    ho tolto lo script t-sql creato al volo ed ho inserito la clausola OPTION (FORCE ORDER) nella query di ricerca.
    In tal modo ho potuto intervenire sul piano di esecuzione a mio piacimento e in effetti adesso la ricerca su 2000000 di record è inferiore al secondo anche se faccio il join tra 4 tabelle nell query.

    Grazie per i consigli...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.