SET FORCEPLAN (Transact-SQL)
Berlaku untuk: SQL ServerAzure SQL Database Azure SQL Managed Instance
Saat FORCEPLAN diatur ke AKTIF, pengoptimal kueri SQL Server memproses gabungan dalam urutan yang sama dengan tabel yang muncul di klausa FROM kueri. Selain itu, mengatur FORCEPLAN ke ON memaksa penggunaan gabungan perulangan berlapis kecuali jenis gabungan lain diperlukan untuk membuat rencana untuk kueri, atau diminta dengan petunjuk gabungan atau petunjuk kueri.
Sintaks
SET FORCEPLAN { ON | OFF }
Keterangan
SET FORCEPLAN pada dasarnya mengambil alih logika yang digunakan oleh pengoptimal kueri untuk memproses pernyataan T-SQL SELECT. Data yang dikembalikan oleh pernyataan SELECT sama terlepas dari pengaturan ini. Satu-satunya perbedaan adalah cara SQL Server memproses tabel untuk memenuhi kueri.
Petunjuk pengoptimal kueri juga dapat digunakan dalam kueri untuk memengaruhi cara SQL Server memproses pernyataan SELECT.
SET FORCEPLAN diterapkan pada waktu eksekusi atau run time dan bukan pada waktu penguraian.
Izin
ATUR izin FORCEPLAN secara default ke semua pengguna.
Contoh
Contoh berikut melakukan gabungan empat tabel. Pengaturan SHOWPLAN_TEXT
diaktifkan, sehingga SQL Server mengembalikan informasi tentang cara memproses kueri secara berbeda setelah SET FORCE_PLAN
pengaturan diaktifkan.
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
Lihat Juga
SELECT (Transact-SQL)
Pernyataan SET (Transact-SQL)
SET SHOWPLAN_ALL (Transact-SQL)
SET SHOWPLAN_TEXT (Transact-SQL)