Condividi tramite


Ottimizzazione delle prestazioni delle query full-text

Le prestazioni di esecuzione delle query full-text possono dipendere da risorse hardware quali memoria, velocità del disco e della CPU, nonché dall'architettura del computer.

Indicazioni per migliorare le prestazioni di esecuzione delle query full-text

Di seguito viene riportato un elenco di indicazioni che possono favorire il miglioramento delle prestazioni di esecuzione delle query full-text.

  • Deframmentare l'indice della tabella di base utilizzando ALTER INDEX REORGANIZE.

  • Riorganizzare il catalogo full-text utilizzando ALTER FULLTEXT CATALOG REORGANIZE. È necessario eseguire queste operazioni prima del test delle prestazioni poiché l'esecuzione di questa istruzione determina un'unione nell'indice master degli indici full-text in tale catalogo.

  • Limitare la scelta delle colonne chiave full-text a una a colonna di dimensioni ridotte. Benché le colonne a 900 byte siano supportate, è consigliabile utilizzare una colonna chiave di dimensioni inferiori per un indice full-text. int e bigint offrono prestazioni ottimali.

  • L'utilizzo di una chiave full-text di tipo integer evita la creazione di un join con la tabella di mapping docid. Una chiave full-text di tipo integer, pertanto, consente di migliorare le prestazioni di esecuzione delle query di un ordine di grandezza e le prestazioni della ricerca per indicizzazione. Nel caso in cui la chiave full-text corrisponda anche alla chiave di indice cluster, i vantaggi a livello di prestazioni saranno ancora maggiori. Per ulteriori informazioni, vedere Struttura di un indice full-text e Procedura: Richiesta di informazioni sulla colonna chiave full-text (Transact-SQL).

  • Combinare più predicati CONTAINS in un singolo predicato CONTAINS. In SQL Server è possibile specificare un elenco di colonne nella query CONTAINS.

  • Se sono necessarie solo informazioni sulla chiave full-text o sulla pertinenza, utilizzare CONTAINSTABLE o FREETEXTTABLE invece di CONTAINS o FREETEXT, rispettivamente.

  • Per limitare i risultati e ottimizzare le prestazioni, utilizzare il parametro top_n_by_rank delle funzioni FREETEXTTABLE e CONTAINSTABLE. top_n_by_rank consente di richiamare solo le occorrenze più pertinenti. Utilizzare questo parametro solo se lo scenario aziendale non richiede il richiamo di tutte le possibili occorrenze, ovvero non richiede il richiamo totale.

    Nota

    Il richiamo totale è in genere necessario per gli scenari legali, ma potrebbe essere meno importante delle prestazioni per altri scenari, ad esempio il commercio elettronico.

  • Controllare il piano di query full-text per verificare che venga scelto il piano di join appropriato. Se necessario, utilizzare un hint di join o un hint per la query. Se un parametro viene utilizzato nella query full-text, il valore utilizzato per la prima volta per il parametro determina il piano di query. È possibile utilizzare l'hint per la query OPTIMIZE FOR per forzare la compilazione della query con il valore desiderato. In questo modo è possibile ottenere un piano della query deterministico e prestazioni migliori.

  • Un numero eccessivo di frammenti di indice full-text nell'indice full-text può causare una significativa riduzione delle prestazioni di esecuzione delle query. Per ridurre il numero di frammenti, riorganizzare il catalogo full-text tramite l'opzione REORGANIZE dell'istruzione ALTER FULLTEXT CATALOGTransact-SQL. Questa istruzione consente di unire tutti i frammenti in un singolo frammento più grande e di rimuovere tutte le voci obsolete dall'indice full-text.

  • Nelle ricerche full-text di SQL Server 2008 gli operatori logici specificati in CONTAINSTABLE (AND, OR) possono essere implementati come join SQL o all'interno di funzioni di flusso con valori di tabella per l'esecuzione full-text. Le query con un solo tipo di operatori logici vengono in genere implementate dall'esecuzione full-text, mentre le query con operatori logici di più tipi presentano anche join SQL. L'implementazione di un operatore logico all'interno della funzione con valori di tabella per l'esecuzione full-text prevede l'utilizzo di alcune proprietà di indice speciali che ne migliorano la velocità rispetto ai join SQL. Per questo motivo, è consigliabile, se possibile, definire le query utilizzando un solo tipo di operatore logico.

  • Per le applicazioni che contengono affermazioni a relazione selettiva, le prestazioni di esecuzione delle query che utilizzano predicati relazionali selettivi e predicati full-text non selettivi potrebbero risultare migliori se le query sono scritte per l'utilizzo di Query Optimizer. In questo modo, Query Optimizer sarà in grado di stabilire la possibilità o meno di utilizzare l'impostazione di intervalli o di predicati per produrre un piano di query efficace. Questo metodo è più semplice e spesso più efficiente rispetto all'indicizzazione di dati relazionali come dati full-text.

Visualizzazione del risultato della suddivisione in token di una combinazione di word breaker, thesaurus ed elenco di parole non significative

Dopo aver applicato una determinata combinazione di word breaker, thesaurus ed elenco di parole non significative a un input della stringa di query, è possibile visualizzare il risultato della suddivisione in token tramite la vista a gestione dinamica sys.dm_fts_parser. Per ulteriori informazioni, vedere sys.dm_fts_parser (Transact-SQL).