Я видел, как люди предлагали скопировать параметры в локальную переменную, чтобы избежать перехвата параметров в хранимом процессе.Скажем, у вас есть
CREATE PROCEDURE List_orders_3 @fromdate datetime AS
DECLARE @fromdate_copy datetime
SELECT @fromdate_copy = @fromdate
SELECT * FROM Orders WHERE OrderDate > @fromdate_copy
(я получил это от http://www.sommarskog.se/query-plan-mysteries.html, но мне нужно больше деталей, чтобы понять это полностью).
Но что это делает с кэшем плана запросов и оптимизатором плана запроса?Если это правда, что оптимизатор не делает никаких предположений о @fromdate_copy, то почему он не будет кэшировать план, который, скорее всего, будет полным просмотром таблицы (так как он не делает никаких предположений, как он мог генерировать что-то еще)?
Является ли этот метод в основном похожим на то, что «никакие входные данные не будут работать хорошо, но никакие входные данные также не будут работать ужасно»?