Настройка и оптимизация производительности полнотекстовых запросов

Производительность полнотекстовых запросов зависит от архитектуры компьютера, а также от объема памяти, скорости работы жесткого диска, ЦП и другого оборудования.

Рекомендации по увеличению производительности обработки полнотекстовых запросов

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

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

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

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

  • При использовании целочисленного полнотекстового ключа не осуществляется соединения с таблицей сопоставлений docid. Следовательно, использование целочисленного полнотекстового ключа на порядок увеличивает производительность запросов и увеличивает производительность сканирования. Еще большей производительности можно добиться, если сделать полнотекстовый ключ также и ключом кластеризованного индекса. Дополнительные сведения см. в разделах Структура полнотекстового индекса и Как запрашивать сведения о столбце полнотекстового ключа (Transact-SQL).

  • Соедините несколько предикатов CONTAINS в один. В SQL Server в запросе с предикатом CONTAINS можно указывать список столбцов.

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

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

    ПримечаниеПримечание

    Общая выборка обычно необходима для юридических сценариев, но для безнес-сценариев, например для электронного бизнеса, она может быть менее важна, чем производительность.

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

  • Наличие в полнотекстовом индексе слишком большого числа полнотекстовых фрагментов может привести к существенному снижению производительности запросов. Чтобы уменьшить число фрагментов, выполните переорганизацию полнотекстового каталога с помощью параметра REORGANIZE в инструкции Transact-SQLALTER FULLTEXT CATALOG. Эта инструкция выполняет слияние всех фрагментов в единый большой фрагмент и удаляет все устаревшие записи из полнотекстового индекса.

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

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

Просмотр итогового результата разметки при использовании средства разбиения по словам, тезауруса и списка стоп-слов

После применения сочетания данного средства разбиения по словам, тезауруса и списка стоп-слов к строковым входным данным запроса итоговый результат разметки можно просмотреть с помощью динамического административного представления sys.dm_fts_parser. Дополнительные сведения см. в разделе sys.dm_fts_parser (Transact-SQL).