De prestaties van query's in volledige tekst verbeteren

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

De volgende lijst met aanbevelingen kan u helpen de prestaties van full-text queries te verbeteren.

Hardwarebronnen zoals geheugen, schijfsnelheid, CPU-snelheid en machinearchitectuur kunnen de prestaties van full-text queries beïnvloeden.

  • Defragmenteer de index van de basistabel met behulp van ALTER INDEX REORGANIZE.

  • De catalogus met volledige tekst opnieuw orden met behulp van ALTER FULLTEXT CATALOG REORGANIZE. Te veel full-text indexfragmenten kunnen leiden tot aanzienlijke achteruitgang van de queryprestaties. Deze verklaring voegt alle fragmenten samen tot één groter fragment per index, waarbij alle verouderde informatie over het voorkomen wordt verwijderd. Zorg ervoor dat je deze instructie uitvoert voordat je de prestatietests uitvoert, want het uitvoeren van deze instructie veroorzaakt een hoofdmergeling van de volledige tekstindexen in die catalogus.

  • Beperk de keuze uit kolommen met volledige tekst tot een kleine kolom. Hoewel een kolom van 900 bytes wordt ondersteund, gebruik een kleinere sleutelkolom in een full-text index. int en bigint bieden de beste prestaties.

  • Het gebruik van een integer full-text key voorkomt een join met de docid mapping-tabel, wat de query- en crawlprestaties verbetert. Extra prestatieverbeteringen zijn mogelijk als de full-text key ook de geclusterde indexsleutel is.

  • Combineer meerdere CONTAINS-predicaten tot één CONTAINS predicaat. In SQL Server kun je een lijst van kolommen in de CONTAINS query specificeren.

  • Als u alleen sleutel- of rangschikkingsinformatie voor volledige tekst nodig hebt, gebruikt u CONTAINSTABLE of FREETEXTTABLE in plaats van respectievelijk CONTAINS of FREETEXT.

  • Om resultaten te beperken en de prestaties te verbeteren, gebruik je de parameter top_n_by_rank van de functies FREETEXTTABLE en CONTAINSTABLE. top_n_by_rank laat u alleen de meest relevante treffers ophalen. Gebruik deze parameter alleen als in uw bedrijfsscenario niet hoeft te worden voldaan aan de vereiste om alle mogelijke treffers op te roepen (met andere woorden, het vereist geen total recall).

    Opmerking

    Totale terugroepactie is doorgaans noodzakelijk voor juridische situaties, maar kan minder belangrijk zijn dan prestaties bij zakelijke scenario's zoals een e-business.

  • Controleer het queryplan voor volledige tekst om ervoor te zorgen dat het juiste joinplan is gekozen. Gebruik indien nodig een join-hint of query-hint. Als een parameter wordt gebruikt in de volledige-tekstquery, wordt met de eerste waarde van de parameter het queryplan bepaald. Je kunt de OPTIMIZE FORquery hint gebruiken om de query te dwingen te compileren met de gewenste waarde. Dit helpt bij het bereiken van een deterministisch queryplan en betere prestaties.

  • Bij zoekopdrachten in volledige tekst kunnen logische operatoren die in CONTAINSTABLE (AND, OR) zijn opgegeven, worden geïmplementeerd als Transact-SQL-joins of binnen de streaming table-valued functions (STVF) voor full-text-uitvoering. Typisch worden queries met slechts één type logische operator puur door full-text uitvoering geïmplementeerd, terwijl queries die logische operatoren combineren ook SQL-joins bezitten. Implementatie van een logische operator in de volledige-tekstuitvoering STVF maakt gebruik van bepaalde speciale indexeigenschappen die het veel sneller maken dan SQL-verbindingen. Om deze reden kunt u, waar mogelijk, uw zoekopdrachten slechts met één type logische operator te kaderen.

  • Voor applicaties die selectieve relationele predicaten bevatten, kunnen queries die selectieve relationele predicaten en niet-selectieve full-text predicaten gebruiken het beste presteren wanneer ze zijn geschreven om de query-optimizer te gebruiken. Deze aanpak stelt de query-optimizer in staat te bepalen of deze predicate- of range-pushdown kan toepassen om een effectief queryplan te genereren. Deze benadering is eenvoudiger en vaak efficiënter dan het indexeren van relationele gegevens als gegevens in volledige tekst.

Zoeken in volledige tekst in SQL Server 2008: Interne functies en verbeteringen