SET FORCEPLAN (Transact-SQL)

Berlaku untuk: SQL Server (semua versi yang didukung) Azure SQL Managed Instance Database Azure SQL

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.

tautan topikIkon Konvensi Sintaks Transact-SQL

Sintaks

  
SET FORCEPLAN { ON | OFF }  

Catatan

Untuk melihat sintaks Transact-SQL untuk SQL Server 2014 dan yang lebih lama, lihat Dokumentasi versi sebelumnya.

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. SHOWPLAN_TEXT Pengaturan diaktifkan, jadi SQL Server mengembalikan informasi tentang cara memproses kueri secara berbeda setelah SET FORCE_PLAN pengaturan diaktifkan.

USE AdventureWorks2012;  
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)