SET FORCEPLAN (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiMicrosoft Fabric'te SQL veritabanı

FORCEPLAN ON olarak ayarlandığında, SQL Server sorgu optimizatoru bir katılımı sorgudaki FROM maddesinde görünen tablolarla aynı sırayla işler. Ayrıca, ON olarak ayarlandığında FORCEPLAN , sorgu için plan oluşturmak için başka tür birleştirmeler gerekmiyorsa veya birleştirme ipuçları veya sorgu ipuçları istenmedikçe iç içe döngü birleşimi kullanılmasını zorunlu kılar.

Transact-SQL söz dizimi kuralları

Sözdizimi

  
SET FORCEPLAN { ON | OFF }  

Açıklamalar

SET FORCEPLAN esasen, sorgu optimizatorunun Transact-SQL SELECT ifadesini işlemek için kullandığı mantığı geçersiz kılar. SELECT ifadesi tarafından duygulanan veriler, bu ayar ne olursa olsun aynıdır. Tek fark, SQL Server'ın sorguyu karşılamak için tabloları işleme şeklidir.

Sorgu optimizer ipuçları, SQL Server'ın SELECT ifadesini nasıl işlediğini etkileyen sorgularda da kullanılabilir.

SET FORCEPLAN Uygulama veya çalışma zamanında uygulanır, ayrıştırma zamanında değil.

Permissions

SET FORCEPLAN Varsayılan olarak tüm kullanıcılara verilen izinler.

Örnekler

Aşağıdaki örnek dört tablodan oluşan bir birleşme gerçekleştirir. Ayar SHOWPLAN_TEXT etkinleştirildiğinde, SQL Server ayar etkinleştirildikten sonra sorguyu farklı SET FORCE_PLAN şekilde işlediğine dair bilgi döndürüyor.

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  

Ayrıca Bkz.

SEÇ (Transact-SQL)
SET İfadeler (Transact-SQL)
SET SHOWPLAN_ALL (Transact-SQL)
SET SHOWPLAN_TEXT (Transact-SQL)