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

Применяется к:SQL ServerAzure SQL DatabaseAzure, управляемому экземпляру SQL Azure

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

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

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

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

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

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

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

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

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

    Заметка

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

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

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

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

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

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

См. также

sys.dm_fts_memory_buffers (Transact-SQL)
sys.dm_fts_memory_pools (Transact-SQL)