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