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