Migliorare le prestazioni delle query di testo integrale

Si applica a:SQL ServerDatabase SQL di AzureIstanza gestita di SQL di Azure

La seguente lista di raccomandazioni può aiutarti a migliorare le prestazioni delle query a testo completo.

Risorse hardware come memoria, velocità del disco, velocità della CPU e architettura macchina possono influenzare le prestazioni delle query a testo intero.

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

  • Riorganizzare il catalogo full-text usando ALTER FULLTEXT CATALOG REORGANIZE. Troppi frammenti di indice a testo completo possono portare a un notevole degrado delle prestazioni delle query. Questa affermazione unisce tutti i frammenti in un unico frammento più grande per indice, eliminando tutte le informazioni di occorrenza obsolete. Assicurati di eseguire questa istruzione prima dei test delle prestazioni perché eseguirla causa una fusione principale degli indici di testo completo in quel catalogo.

  • Limitare la scelta delle colonne chiave full-text a una colonna di piccole dimensioni. Sebbene sia supportata una colonna da 900 byte, si utilizza una colonna chiave più piccola in un indice a testo completo. int e bigint garantiscono le prestazioni migliori.

  • L'uso di una chiave intera a testo intero evita una join con la tabella di mappatura docid , migliorando le prestazioni di query e crawl. Ulteriori miglioramenti di prestazioni sono possibili se la chiave full-text è anche la chiave dell'indice clusterizzato.

  • Combinare più predicati CONTAINS in un unico CONTAINS predicato. In SQL Server, puoi specificare una lista di colonne nella CONTAINS query.

  • Se hai bisogno solo di informazioni di chiave o rango a testo intero, usa CONTAINSTABLE o FREETEXTTABLE invece di CONTAINS o FREETEXT, rispettivamente.

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

    Nota

    Il richiamo totale è tipicamente necessario per scenari legali, ma potrebbe essere meno importante delle prestazioni per scenari aziendali come un e-business.

  • Controllare il piano di query full-text per verificare che sia selezionato il piano di join appropriato. Se necessario, utilizzare un hint di join o un hint di 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. Puoi usare il OPTIMIZE FORquery hint per forzare la query a compilare con il valore che vuoi. In questo modo si ottiene un piano di query deterministico e prestazioni migliori.

  • Nella ricerca full-text, gli operatori logici specificati in CONTAINSTABLE (AND, OR) possono essere implementati sia come join di Transact-SQL sia all'interno delle funzioni con valori di tabella in streaming (STVF) nell'esecuzione full-text. Tipicamente, le query con un solo tipo di operatore logico sono implementate esclusivamente tramite esecuzione a testo intero, mentre le query che mescolano operatori logici possiedono anch'esse join SQL. L'implementazione di un operatore logico all'interno della STVF di esecuzione full-text usa alcune proprietà speciali dell'indice che la rendono molto più veloce dei join SQL. Per questo motivo, dove possibile, inquadra le tue query usando un solo tipo di operatore logico.

  • Per applicazioni che contengono predicati relazionali selettivi, le query che utilizzano predicati relazionali selettivi e predicati full-text non selettivi potrebbero avere le migliori prestazioni quando sono scritte per utilizzare l'ottimizzatore delle query. Questo approccio consente all'ottimizzatore delle query di decidere se può sfruttare il pushdown dei predicati o degli intervalli per generare un piano di query efficace. Questo metodo è più semplice e spesso più efficiente rispetto all'indicizzazione di dati relazionali come dati full-text.

Ricerca Testuale Completa di SQL Server 2008: Interni e Miglioramenti