Megosztás:


ÁLLÍTSD BE A FORCEPLANT (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példánySQL-adatbázis a Microsoft Fabricben

Amikor a FORCEPLAN ON-ra van állítva, az SQL Server lekérdezésoptimalizáló ugyanabban a sorrendben dolgozza fel a csatlakozást, ahogy a lekérdezés FROM záradékában megjelenő táblák jelennek meg. Ezen túlmenően, ha a FORCEPLAN ON-ra állítják, beágyazott loop csatlakozást kell alkalmazni, hacsak nem más típusú csatlakozások szükségesek a lekérdezés tervének megalkotásához, vagy csatlakozási vagy lekérdezési tippekkel kérik őket.

Transact-SQL szintaxis konvenciók

Szemantika

  
SET FORCEPLAN { ON | OFF }  

Megjegyzések

A SET FORCEPLAN lényegében felülírja a lekérdezésoptimalizáló által használt logikát egy Transact-SQL SELECT utasítás feldolgozásához. A SELECT utasítás által visszaadott adatok ugyanazok, függetlenül attól, hogy ez a beállítás van. Az egyetlen különbség az, hogy az SQL Server hogyan dolgozza fel a táblákat, hogy kielégítse a lekérdezést.

Lekérdezésoptimalizáló tippek is használhatók lekérdezésekben annak befolyásolására, hogyan dolgozza fel az SQL Server a SELECT utasítást.

A SET FORCEPLAN végrehajtáskor vagy futásidőben történik, nem pedig parse időben.

Permissions

ÁLLÍTSD be a FORCEPLAN jogosultságokat alapértelmezés minden felhasználónak.

Példák

A következő példa négy tábla összekötését végzi. A SHOWPLAN_TEXT beállítás be van kapcsolva, így az SQL Server visszaadja az információt arról, hogyan dolgozza fel másképp a lekérdezést a beállítás SET FORCE_PLAN engedélyezése után.

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  

Lásd még:

VÁLASZT (Transact-SQL)
SET-utasítások (Transact-SQL)
SET SHOWPLAN_ALL (Transact-SQL)
SET SHOWPLAN_TEXT (Transact-SQL)