Zwiększanie wydajności zapytań pełnotekstowych

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Poniższa lista rekomendacji może pomóc Ci poprawić wydajność pełnotekstowych zapytań.

Zasoby sprzętowe, takie jak pamięć, prędkość dysku, szybkość CPU oraz architektura maszyn, mogą wpływać na wydajność pełnotekstowych zapytań.

  • Defragmentuj indeks tabeli podstawowej przy użyciu funkcji ALTER INDEX REORGANIZE.

  • Zreorganizuj katalog pełnotekstowy za pomocą ALTER FULLTEXT CATALOG REORGANIZE. Zbyt wiele fragmentów indeksu pełnego tekstu może prowadzić do znacznego pogorszenia wydajności zapytań. To instrukcja scala wszystkie fragmenty w jeden większy fragment dla każdego indeksu, usuwając wszelkie przestarzałe informacje o wcześniejszych wystąpieniach. Upewnij się, że uruchomisz to zdanie przed testem wydajności, ponieważ jego uruchomienie powoduje główne połączenie pełnych indeksów w tym katalogu.

  • Ogranicz wybór kolumn klucza pełnotekstowego do małej kolumny. Chociaż obsługiwana jest kolumna o rozmiarze 900 bajtów, w indeksie pełnotekstowym użyj mniejszej kolumny klucza. int i bigint zapewniają najlepszą wydajność.

  • Użycie klucza tekstowego całkowitoliczbowego unika łączenia z tabelą mapowania docid , co poprawia wydajność zapytań i indeksowania. Dodatkowe poprawy wydajności są możliwe, jeśli klucz pełnotekstowy jest jednocześnie kluczem indeksującym klastrowany.

  • Połącz wiele predykatów CONTAINS w jeden CONTAINS predykat. W SQL Server możesz określić listę kolumn w CONTAINS zapytaniu.

  • Jeśli potrzebujesz tylko klucza pełnotekstowego lub informacji o rankingu, użyj CONTAINSTABLE lub FREETEXTTABLE zamiast CONTAINS lub FREETEXT, odpowiednio.

  • Aby ograniczyć liczbę wyników i zwiększyć wydajność, użyj parametru top_n_by_rank funkcji FREETEXTTABLE i CONTAINSTABLE. top_n_by_rank pozwala przypomnieć sobie tylko najbardziej istotne trafienia. Użyj tego parametru tylko wtedy, gdy scenariusz biznesowy nie wymaga przywołania wszystkich możliwych trafień (to znaczy, że nie wymaga pełnej pamięci).

    Uwaga / Notatka

    Całkowite przypomnienie jest zazwyczaj konieczne w sytuacjach prawnych, ale może być mniej istotne niż wyniki w sytuacjach biznesowych, takich jak e-biznes.

  • Sprawdź plan pełnotekstowego zapytania, aby upewnić się, że wybrano odpowiedni plan łączenia. Jeśli musisz, użyj wskazówki dotyczącej sprzężenia lub wskazówek dotyczących zapytań. Jeśli parametr jest używany w zapytaniu pełnotekstowym, wartość parametru po raz pierwszy określa plan zapytania. Możesz użyć wskazówki OPTIMIZE FORzapytania , aby wymusić kompilację zapytania z pożądaną wartością. Pomaga to osiągnąć deterministyczny plan zapytań i lepszą wydajność.

  • W wyszukiwaniu pełnotekstowym operatory logiczne określone w CONTAINSTABLE (AND, OR) mogą być implementowane zarówno jako sprzężenia Transact-SQL, jak i wewnątrz funkcji tabelarycznych strumieniowego wykonywania wyszukiwania pełnotekstowego (STVF). Zazwyczaj zapytania z jednym typem operatora logicznego są realizowane wyłącznie przez wykonanie pełnotekstowe, podczas gdy zapytania łączące operatory logiczne również posiadają połączenia SQL. Implementacja operatora logicznego w pełnotekstowym wykonaniu STVF używa pewnych specjalnych właściwości indeksu, które sprawiają, że jest znacznie szybsze niż sprzężenia SQL. Z tego powodu, gdzie to możliwe, formułuj zapytania tylko za pomocą jednego typu operatora logicznego.

  • W zastosowaniach zawierających selektywne predykaty relacyjne, zapytania wykorzystujące selektywne predykaty relacyjne oraz nieselektywne predykaty pełne tekstu mogą działać najlepiej, gdy są napisane z myślą o optymalizatorze zapytań. To podejście pozwala optymalizatorowi zapytań zdecydować, czy może wykorzystać wypychanie predykatów lub zakresów w celu utworzenia efektywnego planu wykonania zapytania. Takie podejście jest prostsze i często bardziej wydajne niż indeksowanie danych relacyjnych jako danych pełnotekstowych.

Wyszukiwanie pełnotekstowe programu SQL Server 2008: wewnętrzne i ulepszenia