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 का उपयोग कर सकते हैं क्वेरी ऑप्टिमाइज़र के संयोजन के साथ यह संकेत देता है कि क्वेरी कैसे संसाधित की जाती है।