Создание структуры плана

Применяется к:SQL ServerAzure SQL DatabaseAzure, управляемому экземпляру SQL Azure

Структура плана влияет на оптимизацию запросов путем присоединения указаний запросов или фиксированного плана запросов к ним. В структуре плана указывается оператор, который нужно оптимизировать, и либо предложение OPTION, которое содержит указания запросов, которые будут использоваться, либо специальный план запроса, который используется для оптимизации запроса. При выполнении запроса оптимизатор запросов соответствует инструкции Transact-SQL с руководством по плану и присоединяет предложение OPTION к запросу во время выполнения или использует указанный план запроса.

Структура плана применяет к запросу фиксированный план запроса и/или указания запросов.

ограничения

  • Аргументы процедуры sp_create_plan_guide должны задаваться в указанном порядке. При задании значений параметрам процедуры sp_create_plan_guideвсе имена параметров необходимо указывать явно или вообще не указывать. Например, если указан параметр @name =, необходимо также указать параметры @stmt =, @type = и т. д. Аналогично, если параметр @name = пропущен и указано только его значение, имена остальных параметров должны быть также пропущены и должны быть указаны только их значения. Имена аргументов приводятся исключительно в целях описания, чтобы помочь разобраться с синтаксисом. SQL Server не проверяет, совпадает ли указанное имя параметра с именем параметра в позиции, в которой используется имя.

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

  • Нельзя создавать структуры планов типа OBJECT для значения @module_or_batch, ссылающегося на хранимую процедуру, функцию или триггер DML, который задает предложение WITH ENCRYPTION или является временным.

  • Попытка удаления или изменения функции, хранимой процедуры или триггера DML, на которые имеется ссылка в структуре плана (как включенных, так и отключенных), приводит к ошибке. Попытка удалить таблицу, для которой определен триггер, имеющий соответствующую ссылку в структуре плана, также вызывает ошибку.

Разрешения

Для создания структуры плана типа OBJECT требуется разрешение ALTER на указанный объект. Чтобы создать структуру плана типа SQL или TEMPLATE, требуется разрешение ALTER на текущую базу данных.

Создание структуры плана с использованием SSMS

  1. Щелкните значок «+», чтобы развернуть базу данных, в которой требуется создать структуру плана, затем щелкните значок «+», чтобы развернуть папку Программирование .

  2. Щелкните правой кнопкой мыши папку "Руководства по плану" и выберите "Создать план"....select_plan_guide

  3. В поле Имя диалогового окна Создание структуры плана введите имя новой структуры плана.

  4. В поле инструкции введите инструкцию Transact-SQL, к которой применяется руководство по плану.

  5. В списке типов области выберите тип сущности, в которой отображается инструкция Transact-SQL. Это указывает контекст сопоставления инструкции Transact-SQL с руководством по плану. Возможными значениями являются OBJECT, SQLи TEMPLATE.

  6. В поле "Область" введите текст пакета, в котором отображается инструкция Transact-SQL. Текст пакета не может содержать инструкцию USEdatabase. Поле Поток области доступно, только если в качестве второго типа выбран тип SQL . Если типом области является SQL, а поле пакета области пустое, в качестве текста пакета используется значение, указанное в поле Инструкция .

  7. В списке Имя схемы области введите имя схемы, в которой содержится объект. Поле Имя схемы области доступно, только если в качестве второго типа выбран тип области Объект .

  8. В поле имени объекта Scope введите имя хранимой процедуры Transact-SQL, определяемую пользователем скалярную функцию, функцию с табличным значением или триггер DML, в котором отображается инструкция Transact-SQL. Поле Имя объекта области доступно, только если выбран тип области Объект .

  9. В поле "Параметры" введите имя параметра и тип данных всех параметров, внедренных в инструкцию Transact-SQL.

    Параметры применяются только при выполнении одного из следующих условий.

    • Тип области равен SQL или TEMPLATE. Если тип области равен TEMPLATE, то параметры не могут иметь значение NULL.

    • Инструкция Transact-SQL отправляется с помощью sp_executesql, а значение параметра указывается, или SQL Server внутренне отправляет инструкцию после его параметризации.

  10. В поле "Подсказки" введите указания запроса или план запроса, которые будут применены к инструкции Transact-SQL. Чтобы задать одно или несколько указаний запроса, введите предложение OPTION.

  11. Щелкните OK.

plan_guide

Создание руководства по плану с помощью T-SQL

  1. В обозревателе объектов подключитесь к экземпляру ядра СУБД.

  2. На стандартной панели выберите пункт Создать запрос.

  3. Скопируйте следующий пример в окно запроса и нажмите кнопку Выполнить.

    -- creates a plan guide named Guide1 based on a SQL statement  
    EXEC sp_create_plan_guide   
        @name = N'Guide1',   
        @stmt = N'SELECT TOP 1 *   
                  FROM Sales.SalesOrderHeader   
                  ORDER BY OrderDate DESC',   
        @type = N'SQL',  
        @module_or_batch = NULL,   
        @params = NULL,   
        @hints = N'OPTION (MAXDOP 1)';  
    
    

Дополнительные сведения см. в разделе sp_create_plan_guide (Transact-SQL).