Рокки,
Все ответы, данные до сих пор, помогут.Но я должен сказать, что считаю, что проблема глубже, чем отсутствие индекса.
Во-первых, простое предположение, но тот факт, что у вас уже есть 200К строк в таблице, подсказывает мне, что происходит много операций вставки, даже если нет, чтобы запустить функцию над 200К строк будет будьте медленнее и медленнее, чем больше строк вы получите.
Я предлагаю использовать операторы CASE в предложении where.Это исключит вызов FUNCTION , кратный раз для каждой сканируемой строки.Кроме того, он создаст гораздо лучший план выполнения запросов для SQL Server, или, скорее, позволит SQL Server выбрать более оптимальный план , по моему опыту .
Итак, вот модифицированный запрос:
SELECT M.Col7, M.Col8, M.Col9, M.Col10
FROM [MyTable] M
WHERE M.Col1 = CASE WHEN @Col1 IS NULL THEN M.Col1 ELSE @Col1 END
AND M.Col2 = CASE WHEN @Col2 IS NULL THEN M.Col2 ELSE @Col2 END
AND M.Col3 = CASE WHEN @Col3 IS NULL THEN M.Col3 ELSE @Col3 END
AND M.Col4 = CASE WHEN @Col4 IS NULL THEN M.Col4 ELSE @Col4 END
AND M.Col5 = CASE WHEN @Col5 IS NULL THEN M.Col5 ELSE @Col5 END
AND M.Col6 LIKE CASE WHEN @Col6 IS NULL THEN M.Col6 ELSE @Col6 END +'%'
Надеюсь, это поможет.Затем добавьте индекс @ gbn (+1).