SELECT स्टेटमेंट में OPTION FAST क्या करता है?


29

मैंने इस बात पर कुछ खुदाई की है कि OPTION (FAST XXX)क्वेरी संकेत एक SELECTबयान के अंदर क्या करता है और इस पर अभी भी भ्रमित है। MSDN के अनुसार:

निर्दिष्ट करता है कि क्वेरी पहले नंबर_रो की तेजी से पुनर्प्राप्ति के लिए अनुकूलित है। यह एक nonnegative पूर्णांक है। पहला नंबर_रो वापस आने के बाद, क्वेरी निष्पादन जारी रखती है और अपना पूरा परिणाम सेट करती है।

मेरे लिए इसका बहुत मतलब नहीं है, लेकिन मूल रूप से क्वेरी पहले XXX पंक्तियों को वास्तव में तेजी से प्राप्त कर सकती है फिर बाकी सामान्य गति से?

Microsoft Dynamics क्वेरी जो मुझे इस पर सोच रही है:

select pjproj.project,pjproj.project_desc,pjproj.customer,pjproj.cpnyid
from pjproj WITH (NOLOCK)
where project like  '%'
order by project OPTION(FAST 500)

किसी को भी वास्तव में समझा सकता है कि यह क्वेरी संकेत क्या कर रहा है और इसका उपयोग नहीं करने पर इसका फायदा है?

जवाबों:


24

FAST NSQL सर्वर को निष्पादन योजना उत्पन्न करने के लिए जल्दी से परिभाषित पंक्तियों की संख्या वापस करने के साथ बताएगा N

ध्यान दें कि अनुमान तब से लगेंगे Nजब तक आप Nपंक्तियों को पुनः प्राप्त करने के लिए एसक्यूएल सर्वर को बता रहे हैं ।

जैसे नीचे क्वेरी के साथ चल रहा है fast 500:

-- total rows : 19972
 SELECT [BusinessEntityID]
      ,[TotalPurchaseYTD]
      ,[DateFirstPurchase]
      ,[BirthDate]
      ,[MaritalStatus]
      ,[YearlyIncome]
      ,[Gender]
      ,[TotalChildren]
      ,[NumberChildrenAtHome]
      ,[Education]
      ,[Occupation]
      ,[HomeOwnerFlag]
      ,[NumberCarsOwned]
  FROM [AdventureWorks2012].[Sales].[vPersonDemographics]
  order by BusinessEntityID
  option (fast 500)

स्थूल बनाम वास्तविक पंक्तियों के साथ option (fast 500)

यहाँ छवि विवरण दर्ज करें

स्थावर बनाम वास्तविक पंक्तियाँ option (fast 500)

यहाँ छवि विवरण दर्ज करें

एक उपयोग मामला तब होगा जब कोई एप्लिकेशन कैशिंग कर रहा है (पृष्ठभूमि में बड़ी मात्रा में डेटा लोड करें) और उपयोगकर्ता को डेटा का एक टुकड़ा जल्द से जल्द दिखाना चाहता है।

एक और दिलचस्प उपयोग का मामला एसएसआईएस भूमि में है जिसे रॉब फार्लेFAST N एक उत्प्रेरक के रूप में उपयोग करते हुए डेटा पुनर्प्राप्ति में तेजी लाने का वर्णन करता है ।

इस संकेत को जोड़कर, ऐसा महसूस हुआ कि क्वेरी में एक जादुई छड़ी लहराई गई थी, जिससे इसे कई बार तेजी से चलाया जा सके।

देखें Remus Rusanu के जवाब के रूप में अच्छी तरह से


11

जब आप इस क्वेरी संकेत विकल्प (फास्ट n) का उपयोग करते हैं, तो ऑप्टिमाइज़र एक निष्पादन योजना चुनता है जो रिकॉर्ड की गई राशि को सबसे तेज़ तरीके से वापस कर सकती है। आम तौर पर, ऑप्टिमाइज़र एक ऐसे मार्ग पर निर्णय लेने की कोशिश करता है जो कुशलतापूर्वक पूरा परिणाम लौटा सकता है। इसलिए, यदि आप जल्दी से वापस आने के लिए पंक्तियों का एक सेट चाहते हैं, तो आप संभवतः उन्हें पुनः प्राप्त करने के लिए इसका उपयोग कर सकते हैं, लेकिन ज्यादातर मामलों में, इस संकेत का उपयोग करने से पूरा परिणाम वापस धीमा हो जाएगा, बनाम अनुकूलक को एक योजना का उपयोग करने दें। इसलिए।

बस एक उपयोग के मामले पर विस्तृत करने के लिए: आपके पास दो काफी बड़ी तालिकाएं हो सकती हैं, जिन्हें आपको एक साथ मिलाने की आवश्यकता है, लेकिन आप जानते हैं कि डेटा का एक छोटा सा सेट है जिसे आपको उनमें से एक के साथ काम करने की आवश्यकता है। इस मामले में, अतिरिक्त इंडेक्स / ओवरहेड बनाने के लिए एक बड़ी तालिका पर FAST का उपयोग करने से लेटिंग्स के बजाय SQL पृष्ठभूमि में एक विशाल हैश तालिका बनाने में मदद कर सकता है।


2

मैं एक ही सवाल पर कुछ साल पहले डगमगाया जब Dynamics AX में प्रदर्शन के मुद्दों की जाँच। Microsoft की व्याख्या के बाद, मैं संकेत द्वारा ट्रिगर की गई एक अलग निष्पादन योजना देख सकता था और यह यहां दिए गए अन्य उत्तरों से मेल खाती है।

संकेत के साथ, SQL सर्वर एक निष्पादन योजना खोजने की कोशिश करता है जो परिणामों की एक प्रकार की स्ट्रीमिंग की अनुमति देता है, क्योंकि वे निष्पादन योजना के बजाय एक नेस्टेड लूप से बाहर आते हैं, जिसके लिए सभी रिकॉर्डों को पढ़ने से पहले (और संभावित रूप से क्रमबद्ध) की आवश्यकता होती है उत्पादन किया जा रहा है।

मेरे मामले में एकमात्र मुद्दा यह है कि SQL सर्वर हमेशा संकेत का उपयोग करते समय परिणाम वापस करने के लिए (कई) मिनट लेता है, जबकि क्वेरी ने परिणाम (संपूर्ण परिणाम सेट) संकेत के बिना कुछ ही समय में वापस कर दिया ... काफी नहीं अपेक्षित था। मैं व्यक्तिगत रूप से इस संकेत का उपयोग बड़ी सावधानी से करूंगा, और हमारे गतिशीलता वातावरण में सभी रूपों पर व्यवस्थित रूप से नहीं (ठीक है, अब और नहीं)।

तो, ओपी का जवाब देने के लिए: कई संकेतों की तरह, यह जरूरी नहीं है कि क्वेरी को बेहतर बनाने में मदद करें जैसे कि यह करना है (इसलिए ... परीक्षण, परीक्षण, परीक्षण!)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.