Поделиться через


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

Далее приведен список рекомендаций по повышению производительности обработки полнотекстовых запросов.

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

  • Выполните дефрагментацию индекса базовой таблицы с помощью инструкции 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 в инструкции Transact-SQL ALTER FULLTEXT CATALOG. Эта инструкция выполняет слияние всех фрагментов в единый большой фрагмент и удаляет все устаревшие записи из полнотекстового индекса.

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

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

Связанные ресурсы

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

См. также

Справочник

sys.dm_fts_memory_buffers (Transact-SQL)

sys.dm_fts_memory_pools (Transact-SQL)