Aracılığıyla paylaş


FORCEPLAN (Transact-SQL) KUR

Ş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 birleşmeyi sorgunun FROM cümlesinde görünen tablolarla aynı sırayla işler. Ayrıca, FORCEPLAN'ı ON'a ayarlamak, 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şiminin kullanılmasını zorunlu kılmaktadır.

Transact-SQL söz dizimi kuralları

Sözdizimi

  
SET FORCEPLAN { ON | OFF }  

Açıklamalar

SET FORCEPLAN, Transact-SQL SELECT ifadesini işlemek için sorgu optimizatorunun kullandığı mantığı geçersiz kılmıştır. 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, ayrıştırma zamanı değil, yürütme veya çalıştırma zamanında uygulanır.

Permissions

SET FORCEPLAN izinleri varsayılan olarak tüm kullanıcılara ait.

Ö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 Deyimleri (Transact-SQL)
SET SHOWPLAN_ALL (Transact-SQL)
SET SHOWPLAN_TEXT (Transact-SQL)