Без плана запроса, и так как все имена ваших столбцов являются общими, и я не уверен, что именно вы пытаетесь создать, я не могу сказать вам вещи, которые есть или не нужны втам.Но вот несколько общих советов:
Ваша близость к коррелированным подзапросам, вероятно, не помогает, равно как и тот факт, что ваши предикаты OR
были бы вместе.Вполне вероятно, что ваша процедура иногда или всегда выполняет полное сканирование таблицы, поскольку она не знает, какие входные данные у вас могут быть.
Сначала я бы порекомендовал выделить другие OR
дел в своих собственных ветках if / else.Таким образом, каждый оператор может получить план запроса в соответствии с тем, что он делает.
Я также посмотрю, можно ли сделать это в несколько этапов.Возможно, проведите хороший эффективный поиск по вашему большому столу и добавьте его во временную таблицу или что-то в этом роде, а затем работайте с гораздо меньшим изолированным набором.