Улучшение составления / кэширования плана запросов - PullRequest
0 голосов
/ 07 декабря 2010

У меня довольно простой позиционный инвертированный индекс, в котором я храню много слов (поисковых терминов), и я использую это для эффективного поиска общего назначения.

Моя проблема в том, что компиляция плана запроса на самом деле занимает значительно больше времени, чем само выполнение, я подумал, что можно с этим что-то сделать.

  1. Я использую динамический T-SQL (построение запроса из строк)
  2. Я использую много CTE
  3. Существует несколько флажков фильтра, которые зависят от первоначального результата поиска по населению (возьмите результат поиска и получите подсчет некоторого свойства некоторого объекта). например для каждого человека, найденного в тексте поиска, укажите количество участвующих организаций и их частоту (количество). Их нужно много переоценить.
  4. Я выполнил параметризацию (учитывая их размеры по умолчанию, а не некоторые константы, хотя это должно быть хорошо, а?) И уточнил все таблицы, я полагаюсь на представления, где это возможно.

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

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

Если вы хотите посмотреть T-SQL, я могу предоставить примеры, просто он большой, примерно 100 строк T-SQL на запрос. Я решил сначала спросить, прежде чем мы пойдем по этому пути, может быть, решение намного проще, чем я считаю?

1 Ответ

1 голос
/ 07 декабря 2010

Рассматривали ли вы возможность применения подсказки OPTIMIZE FOR ?

Если вы можете разбить большой запрос на более мелкие параметризованные хранимые процедуры и объединить их результаты, они с большей вероятностью будут кэшироваться.

Существует также возможность оптимизации для специальных рабочих нагрузок в SQL Server 2008 (хотя это может быть последним средством):

sp_CONFIGURE 'show advanced options',1
RECONFIGURE
GO

sp_CONFIGURE ‘optimize for ad hoc workloads’,1
RECONFIGURE
GO
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...