Published on

December 17, 2011

Понимание параметрического затравочного в SQL Server

При написании запросов в SQL Server существуют разные способы передачи значений фильтра для извлечения данных. В этой статье мы рассмотрим три общих метода и обсудим концепцию параметрического затравочного.

1. Жестко закодированное значение фильтра

Первый метод заключается в жестком закодировании значения фильтра непосредственно в запросе. Например:

SELECT
    *
FROM
    Sales.Orders
WHERE
    DateAndTime < '19900101'

Этот подход прост и прямолинеен, но он лишен гибкости. Если значение фильтра нужно изменить, сам запрос должен быть изменен.

2. Переменная

Второй метод использует переменную для хранения значения фильтра. Вот пример:

DECLARE @FilterDate DATETIME = '19900101'
SELECT
    *
FROM
    Sales.Orders
WHERE
    DateAndTime < @FilterDate

Использование переменных позволяет более динамически фильтровать данные. Значение можно легко изменить без изменения запроса. Однако, этот метод вводит концепцию параметрического затравочного.

3. Хранимая процедура

Третий метод заключается в использовании хранимой процедуры с параметром. Вот пример:

CREATE PROCEDURE Sales.GetOrders
    @FilterDate DATETIME2(0) 
AS
    
    SELECT
        *
    FROM
        Sales.Orders
    WHERE
        DateAndTime < @FilterDate
GO
EXECUTE Sales.GetOrders '19900101'

Хранимые процедуры обеспечивают инкапсуляцию и повторное использование. Они могут принимать входные параметры, что делает их более гибкими, чем предыдущие методы. Однако, параметрическое затравочное становится еще более важным в этом сценарии.

Что такое параметрическое затравочное?

При компиляции запроса оптимизатор не знает значения переменных. Это важно, потому что это позволяет использовать один и тот же план выполнения для разных значений. Однако, есть исключения из этого правила. Хранимые процедуры, sp_executesql и параметризованные запросы – это случаи, когда SQL Server “запоминает” значения входных параметров во время компиляции.

Параметрическое затравочное может иметь свои плюсы и минусы:

Плюсы параметрического затравочного

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

Минусы параметрического затравочного

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

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

В заключение, параметрическое затравочное является мощной функцией в SQL Server, которая может улучшить производительность, уменьшая накладные расходы на компиляцию. Однако, важно знать о его ограничениях и рассмотреть альтернативные подходы при необходимости.

Следите за нашим следующим постом, где мы обсудим стратегии преодоления недостатков параметрического затравочного. Удачного запроса!

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.