Förbättra prestandan för fulltextfrågor

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Följande lista med rekommendationer kan hjälpa dig att förbättra prestandan för fulltextfrågor.

Hårdvaruresurser som minne, diskhastighet, CPU-hastighet och maskinarkitektur kan påverka prestandan hos fulltextfrågor.

  • Defragmentera bastabellens index med hjälp ALTER INDEX av REORGANIZE.

  • Omorganisera fulltextkatalogen med ALTER FULLTEXT CATALOG REORGANISERA. För många fulltextindexfragment kan leda till betydande försämring av frågeprestandan. Detta uttalande slår ihop alla fragment till ett enda större fragment per index, vilket tar bort all föråldrad förekomstinformation. Se till att du kör detta uttalande innan prestandatestning eftersom att köra detta uttalande orsakar en huvudsammanslagning av fulltextindexen i katalogen.

  • Begränsa ditt val av nyckelkolumner i fulltext till en liten kolumn. Även om en 900-bytes kolumn stöds, använd en mindre nyckelkolumn i ett fulltextindex. int och bigint ger bästa prestanda.

  • Att använda en fulltextnyckel av heltalstyp undviker en koppling till mappningstabellen för docid, vilket förbättrar fråge- och genomsökningsprestandan. Ytterligare prestandaförbättringar kan uppnås om fulltextnyckeln också är nyckeln för det klustrade indexet.

  • Kombinera flera CONTAINS-predikat till ett predikat CONTAINS . I SQL Server kan du ange en lista med kolumner i fråganCONTAINS.

  • Om du bara behöver fulltextnyckel eller rankinformation, använd CONTAINSTABLE eller FREETEXTTABLE istället för CONTAINS eller FREETEXT, respektive.

  • För att begränsa resultat och öka prestandan, använd parametern top_n_by_rank för FREETEXTTABLE och CONTAINSTABLE funktionerna. top_n_by_rank gör att du bara kan återkalla de mest relevanta träffarna. Använd endast den här parametern om ditt affärsscenario inte kräver att alla möjliga träffar återkallas (det vill säga att det inte kräver fullständig återkallelse).

    Anmärkning

    Total återkallelse är vanligtvis nödvändigt för juridiska scenarier, men kan vara mindre viktigt än prestation i affärsscenarier som e-företag.

  • Kontrollera frågeplanen i fulltext för att se till att rätt kopplingsplan har valts. Använd ett kopplingstips eller frågetips om du behöver det. Om en parameter används i fulltextfrågan avgör parameterns första gång-värde frågeplanen. Du kan använda OPTIMIZE FORfrågetipset för att tvinga frågan att kompilera med det värde du vill ha. Detta hjälper till att uppnå en deterministisk frågeplan och bättre prestanda.

  • Vid fulltextsökning kan logiska operatorer som anges i CONTAINSTABLE (AND, OR) implementeras antingen som Transact-SQL-joiner eller i de strömmande tabellvärdesfunktionerna (STVF) för fulltextkörning. Vanligtvis implementeras frågor med endast en typ av logisk operator enbart genom fulltextexekvering, medan frågor som blandar logiska operatorer också har SQL-joinar. Implementeringen av en logisk operator i STVF för fulltextkörning använder vissa särskilda indexegenskaper som gör den mycket snabbare än SQL-kopplingar. Av denna anledning bör du, där det är möjligt, formulera dina sökfrågor med bara en typ av logisk operator.

  • För applikationer som innehåller selektiva relationella predikat kan frågor som använder selektiva relationella predikat och icke-selektiva fulltextpredikat prestera bäst när de skrivs för att använda frågeoptimeraren. Denna metod gör det möjligt för frågeoptimeraren att avgöra om den kan utnyttja predikat- eller intervallpushdown för att skapa en effektiv frågeplan. Den här metoden är enklare och ofta effektivare än att indexera relationsdata som fulltextdata.

SQL Server 2008 fulltextsökning: Intern funktionalitet och förbättringar