SET FORCEPLAN
स्टेटमेंट SQL सर्वर क्वेरी ऑप्टिमाइज़र द्वारा T-SQL को प्रोसेस करने के लिए उपयोग किए गए लॉजिक को ओवरराइड करता है SELECT
बयान।
अधिक विशेष रूप से, जब FORCEPLAN
ON
पर सेट है , क्वेरी ऑप्टिमाइज़र उसी क्रम में शामिल होने की प्रक्रिया करता है जैसे तालिकाएँ FROM
. में दिखाई देती हैं एक प्रश्न का खंड।
यह नेस्टेड लूप जॉइन के उपयोग को भी बाध्य करता है जब तक कि क्वेरी के लिए योजना बनाने के लिए अन्य प्रकार के जॉइन की आवश्यकता नहीं होती है, या उनसे जुड़ने के संकेत या क्वेरी संकेत के साथ अनुरोध किया जाता है।
उदाहरण
यह प्रदर्शित करने के लिए कि कैसे FORCEPLAN
काम करता है, मैं दो SELECT
चलाने जा रहा हूं क्वेरी, पहले FORCEPLAN
. के साथ ON
पर सेट करें , फिर FORCEPLAN
. के साथ OFF
पर सेट करें .
दोनों प्रश्न समान हैं, इस अपवाद के साथ कि सम्मिलित तालिकाएं एक अलग क्रम में सूचीबद्ध हैं।
इस उदाहरण में मैं SHOWPLAN_XML
. का उपयोग करता हूं अनुमानित क्वेरी योजना दिखाने के लिए, लेकिन आप उतनी ही आसानी से किसी अन्य विधि का उपयोग कर सकते हैं (जैसे Azure डेटा स्टूडियो में समझाएं बटन, या Include Actual Execution Plan
वास्तविक क्वेरी योजना प्रदर्शित करने के लिए SSMS में आइकन)।
फोर्सप्लान चालू करें
SET FORCEPLAN ON;
GO
SET SHOWPLAN_XML ON;
GO
SELECT
ar.ArtistName,
al.AlbumName,
g.Genre
FROM
Artists ar
INNER JOIN Albums al
ON ar.ArtistId = al.ArtistId
INNER JOIN Genres g
ON al.GenreId = g.GenreId;
SELECT
ar.ArtistName,
al.AlbumName,
g.Genre
FROM
Albums al
INNER JOIN Genres g
ON al.GenreId = g.GenreId
INNER JOIN Artists ar
ON ar.ArtistId = al.ArtistId;
परिणाम:
हम देख सकते हैं कि प्रत्येक क्वेरी के लिए क्वेरी योजना उस क्रम को दर्शाती है जिसमें मैंने FROM
में तालिका के नाम शामिल किए हैं खंड।
फोर्सप्लान बंद करें
SET SHOWPLAN_XML OFF;
GO
SET FORCEPLAN OFF;
GO
SET SHOWPLAN_XML ON;
GO
SELECT
ar.ArtistName,
al.AlbumName,
g.Genre
FROM
Artists ar
INNER JOIN Albums al
ON ar.ArtistId = al.ArtistId
INNER JOIN Genres g
ON al.GenreId = g.GenreId;
SELECT
ar.ArtistName,
al.AlbumName,
g.Genre
FROM
Albums al
INNER JOIN Genres g
ON al.GenreId = g.GenreId
INNER JOIN Artists ar
ON ar.ArtistId = al.ArtistId;
परिणाम:
इस बार, दोनों प्रश्नों का परिणाम एक समान क्वेरी योजना में होता है। क्वेरी ऑप्टिमाइज़र ने उस क्रम को नज़रअंदाज़ कर दिया जिसमें मैंने उन्हें FROM
. में सूचीबद्ध किया था खंड और अपना स्वयं का आदेश निर्धारित किया।
ध्यान दें कि FORCEPLAN
सेटिंग SELECT
. द्वारा लौटाए गए डेटा को नहीं बदलती है बयान। वास्तविक परिणाम समान हैं चाहे FORCEPLAN
ON
पर सेट है या OFF
. केवल अंतर ही तालिकाओं को संसाधित करने का तरीका है (जो प्रदर्शन पर प्रभाव डाल सकता है)।
आप SET FORCEPLAN
का उपयोग कर सकते हैं क्वेरी ऑप्टिमाइज़र के संयोजन के साथ यह संकेत देता है कि क्वेरी कैसे संसाधित की जाती है।