Оптимизация планов выполнения для параметризованных запросов T-SQL, содержащих функции окна

РЕДАКТИРОВАТЬ: ЯМы обновили пример кода и предоставили полную таблицу и реализации представлений для справки, но существенный вопрос остается неизменным.

У меня довольно сложное представление в базе данных, которую я пытаюсь запросить. Когда я пытаюсь извлечь набор строк из представления путем жесткого кодирования предложения WHERE для конкретных значений внешнего ключа, представление выполняется очень быстро с оптимальным планом выполнения (индексы используются правильно и т. Д.)

SELECT * 
FROM dbo.ViewOnBaseTable
WHERE ForeignKeyCol = 20

Однако, когда я пытаюсь добавить параметры в запрос, внезапно мой план выполнения разваливается. Когда я запускаю запрос ниже, яя получаю сканирование по индексу вместо поиска повсюду, а производительность запросов очень низкая.

DECLARE @ForeignKeyCol int = 20

SELECT * 
FROM dbo.ViewOnBaseTable
WHERE ForeignKeyCol = @ForeignKeyCol 

м с использованием SQL Server 2008 R2. Что здесь дает? Что это за использование параметров, которые вызывают неоптимальный план? Любая помощь будет принята с благодарностью.

Для справки, вот определения объектов, для которых яЯ получаю ошибку.

CREATE TABLE [dbo].[BaseTable]
(
    [PrimaryKeyCol] [uniqueidentifier] PRIMARY KEY,
    [ForeignKeyCol] [int] NULL,
    [DataCol] [binary](1000) NOT NULL
)

CREATE NONCLUSTERED INDEX [IX_BaseTable_ForeignKeyCol] ON [dbo].[BaseTable]
(
    [ForeignKeyCol] ASC
)

CREATE VIEW [dbo].[ViewOnBaseTable]
AS
SELECT
    PrimaryKeyCol,
    ForeignKeyCol,
    DENSE_RANK() OVER (PARTITION BY ForeignKeyCol ORDER BY PrimaryKeyCol) AS ForeignKeyRank,
    DataCol
FROM
    dbo.BaseTable

Я уверен, что проблема с оконной функцией, но я фильтрую свой запрос по одному значению, по которому оконная функция разделяет, поэтому я ожидал, что оптимизатор сначала отфильтрует, а затем запустит оконную функцию. Это делается в жестко заданном примере, но не в параметризованном примере. Ниже приведены два плана запроса. Верхний план хорош, а нижний план плох.

Ответы на вопрос(3)

Ваш ответ на вопрос