Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Применимо к:SQL Server
База данных
SQL AzureУправляемый экземпляр
SQL AzureБаза данных SQL в Microsoft Fabric
Когда FORCEPLAN настроено на ON, оптимизатор запросов SQL Server обрабатывает соединение в том же порядке, в котором таблицы отображаются в клаузе FROM запроса. Кроме того, установка FORCEPLAN в ON заставляет использовать вложенный цикл join только для построения плана запроса не требуются другие типы соединений или не запрашиваются с подсказками для join или подсказками к запросу.
Соглашения о синтаксисе Transact-SQL
Синтаксис
SET FORCEPLAN { ON | OFF }
Замечания
SET FORCEPLAN по сути, переопределяет логику, используемую оптимизатором запросов для обработки оператора Transact-SQL SELECT. Данные, возвращаемые инструкцией SELECT, не зависят от этого параметра. Единственное различие заключается в том, как SQL Server обрабатывает таблицы для удовлетворения запроса.
Указания оптимизатора запросов также можно использовать в запросах, чтобы повлиять на способ обработки инструкции SELECT SQL Server.
SET FORCEPLAN применяется во время выполнения или выполнения, а не во время разбора.
Разрешения
SET FORCEPLAN По умолчанию права доступны всем пользователям.
Примеры
В следующем примере выполняется соединение четырех таблиц. Параметр SHOWPLAN_TEXT включен, поэтому SQL Server возвращает сведения о том, как он обрабатывает запрос по-разному после SET FORCE_PLAN включения параметра.
USE AdventureWorks2022;
GO
-- Make sure FORCEPLAN is set to OFF.
SET SHOWPLAN_TEXT OFF;
GO
SET FORCEPLAN OFF;
GO
SET SHOWPLAN_TEXT ON;
GO
-- Example where the query plan is not forced.
SELECT p.LastName, p.FirstName, v.Name
FROM Person.Person AS p
INNER JOIN HumanResources.Employee AS e
ON e.BusinessEntityID = p.BusinessEntityID
INNER JOIN Purchasing.PurchaseOrderHeader AS poh
ON e.BusinessEntityID = poh.EmployeeID
INNER JOIN Purchasing.Vendor AS v
ON poh.VendorID = v.BusinessEntityID;
GO
-- SET FORCEPLAN to ON.
SET SHOWPLAN_TEXT OFF;
GO
SET FORCEPLAN ON;
GO
SET SHOWPLAN_TEXT ON;
GO
-- Reexecute inner join to see the effect of SET FORCEPLAN ON.
SELECT p.LastName, p.FirstName, v.Name
FROM Person.Person AS p
INNER JOIN HumanResources.Employee AS e
ON e.BusinessEntityID = p.BusinessEntityID
INNER JOIN Purchasing.PurchaseOrderHeader AS poh
ON e.BusinessEntityID = poh.EmployeeID
INNER JOIN Purchasing.Vendor AS v
ON poh.VendorID = v.BusinessEntityID;
GO
SET SHOWPLAN_TEXT OFF;
GO
SET FORCEPLAN OFF;
GO