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

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

В этом разделе

  • Перед началом работы выполните следующие действия.

    Ограничения

    Безопасность

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

    Среда SQL Server Management Studio

    Transact-SQL

Перед началом работы

Ограничения

  • Аргументы процедуры 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 на текущую базу данных.

Значок стрелки, используемый со ссылкой «В начало»[В начало]

Использование среды SQL Server Management Studio

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  11. Нажмите кнопку ОК.

Значок стрелки, используемый со ссылкой «В начало»[В начало]

Использование Transact-SQL

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

  1. В обозревателе объектов установите соединение с экземпляром компонента Компонент Database Engine.

  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).

Значок стрелки, используемый со ссылкой «В начало»[В начало]