У меня есть представление, которое возвращает 2 дюйма из таблицы, используя CTE.Если я запрашиваю представление, как это, оно выполняется менее чем за секунду
SELECT * FROM view1 WHERE ID = 1
Однако, если я запрашиваю представление, как это, это занимает 4 секунды.
DECLARE @id INT = 1
SELECT * FROM View1 WHERE ID = @id
Я проверил2 плана запроса, и первый запрос выполняет поиск кластеризованного индекса по главной таблице, возвращая 1 запись, затем применяя остальную часть запроса представления к этому набору результатов, где в качестве второго запроса выполняется сканирование индекса, которое возвращает около 3000 записей записейа не только тот, который мне интересен, а затем отфильтровываю набор результатов.
Есть ли что-то очевидное, чего мне не хватает, чтобы попытаться заставить второй запрос использовать поиск индекса, а не сканирование индекса,Я использую SQL 2008, но все, что я делаю, должно работать и на SQL 2005. Сначала я подумал, что это какая-то проблема с анализом параметров, но я получаю те же результаты, даже если очищаю кеш.