Повышение производительности полнотекстовых запросов

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure

Следующий список рекомендаций может помочь вам улучшить производительность полнотекстовых запросов.

Аппаратные ресурсы, такие как память, скорость диска, скорость процессора и архитектура машины, могут влиять на производительность полнотекстовых запросов.

  • Дефрагментируйте индекс базовой таблицы с помощью ALTER INDEX REORGANIZE.

  • Переорганизуйте полнотекстовый каталог с помощью ALTER FULLTEXT CATALOG REORGANIZE. Слишком большое количество полнотекстовых фрагментов индекса может привести к значительному ухудшению производительности запросов. Эта инструкция объединяет все фрагменты в один более крупный фрагмент для каждого индекса, удаляя всю устаревшую информацию о вхождениях. Убедитесь, что вы выполняете эту инструкцию перед тестированием производительности, поскольку её выполнение вызывает основное слияние полнотекстовых индексов в данном каталоге.

  • В качестве полнотекстового ключевого столбца выбирайте небольшой столбец. Хотя поддерживается столбец размером 900 байт, используйте меньший столбец с ключом в полнотекстовом индексе. Использование типовint и bigint обеспечивает улучшенную производительность.

  • Использование целочисленного полнотекстового ключа позволяет избежать соединения с таблицей сопоставления docid, что повышает производительность запросов и обхода. Дополнительные повышения производительности возможны, если полнотекстовый ключ одновременно является кластеризованным индексным ключом.

  • Объедините несколько СОДЕРЖИТ предикатов в один CONTAINS предикат. В SQL Server можно задать список столбцов в CONTAINS запросе.

  • Если вам нужен только полнотекстовый ключ или информация о ранге, используйте CONTAINSTABLE или FREETEXTTABLE вместо CONTAINS или FREETEXT, соответственно.

  • Чтобы ограничить результаты и повысить производительность, используйте параметр top_n_by_rank функций FREETEXTTABLE and CONTAINSTABLE . Параметр top_n_by_rank позволяет извлекать только наиболее релевантные результаты. Используйте этот параметр только в том случае, если бизнес-сценарий не требует отзыва всех возможных попаданий (т. е. не требует полного отзыва).

    Примечание.

    Полное отзыв обычно необходим для юридических ситуаций, но может быть менее важен, чем эффективность для бизнес-сценариев, таких как электронный бизнес.

  • Проверьте план полнотекстового запроса и убедитесь, что выбран подходящий план соединения. При необходимости используйте подсказку соединения или подсказку запроса. Если в полнотекстовом запросе используется параметр, то его начальное значение определяется планом запроса. Вы можете использовать OPTIMIZE FORподсказку запроса , чтобы заставить запрос скомпилировать с нужным вам значением. Это позволит сделать план запроса детерминированным и повысить его производительность.

  • В полнотекстовом поиске логические операторы, указанные в CONTAINSTABLE (AND, OR), могут быть реализованы либо с помощью соединений Transact-SQL, либо в потоковых табличнозначных функциях (STVF) полнотекстового механизма выполнения. Обычно запросы с одним типом логических операторов реализуются исключительно полнотекстовым исполнением, тогда как запросы, смешивающие логические операторы, также имеют SQL-соединения. Логический оператор внутри полнотекстовой функции, возвращающей табличное значение (STVF), использует некоторые специальные свойства индекса, что делает её значительно быстрее, чем операции JOIN в SQL. По этой причине, где возможно, формулируйте запросы только с помощью одного типа логического оператора.

  • Для приложений, содержащих избирательные реляционные предикаты, запросы с селективными реляционными предикатами и неселективными полнотекстовыми предикатами могут работать лучше всего, если они написаны с использованием оптимизатора запросов. Такой подход позволяет оптимизатору запросов определить, может ли он использовать проталкивание предикатов или диапазонов, чтобы построить эффективный план выполнения запроса. Данный подход более прост и часто более эффективен, чем индексирование реляционных данных в качестве полнотекстовых данных.

Средство полнотекстового поиска SQL Server 2008: возможности и улучшения