खोज…


संकेत शामिल करें

जब आप दो तालिकाओं में शामिल होते हैं, तो SQL सर्वर क्वेरी ऑप्टिमाइज़र (QO) विभिन्न प्रकार के जोड़ चुन सकता है, जिनका उपयोग क्वेरी में किया जाएगा:

  • एचएएसएच शामिल हों
  • LOOP शामिल हों
  • MERGE शामिल हो

QO योजनाओं का पता लगाएगा और तालिकाओं में शामिल होने के लिए इष्टतम ऑपरेटर का चयन करेगा। हालांकि, यदि आप सुनिश्चित हैं कि आप जानते हैं कि इष्टतम जुड़ने वाला ऑपरेटर क्या होगा, तो आप निर्दिष्ट कर सकते हैं कि किस तरह के जॉयइन का उपयोग किया जाना चाहिए। इनर LOOP जॉइन QO को नेस्टेड लूप ज्वाइन करने के लिए बाध्य करेगा जबकि दो टेबल्स को मिलाते हुए:

select top 100 *
from Sales.Orders o 
    inner loop join Sales.OrderLines ol 
    on o.OrderID = ol.OrderID

आंतरिक मर्ज में शामिल होने से MERGE ऑपरेटर को बल मिलेगा:

select top 100 *
from Sales.Orders o 
    inner merge join Sales.OrderLines ol 
    on o.OrderID = ol.OrderID

इनर हैश ज्वाइन एचएसएच ज्वाइन ऑपरेटर को मजबूर करेगा:

select top 100 *
from Sales.Orders o 
    inner hash join Sales.OrderLines ol 
    on o.OrderID = ol.OrderID

संकेत द्वारा समूह

जब आप GROUP BY क्लॉज का उपयोग करते हैं, तो SQL सर्वर क्वेरी ऑप्टिमाइज़र (QO) विभिन्न प्रकार के समूहीकरण ऑपरेटर चुन सकता है:

  • एचएसएच एग्रीगेट जो समूह प्रविष्टियों के लिए हैश-मैप बनाता है
  • स्ट्रीम एग्रीगेट करें जो प्री-ऑर्डर किए गए इनपुट के साथ अच्छी तरह से काम करता है

यदि आप जानते हैं कि इष्टतम क्या होगा, तो आप स्पष्ट रूप से कह सकते हैं कि क्यूओ एक या किसी अन्य ऑपरेटर को चुनता है। विकल्प (आदेश समूह) के साथ, QO हमेशा स्ट्रीम एग्रीगेट का चयन करेगा और यदि इनपुट सॉर्ट नहीं किया जाता है, तो स्ट्रीम एग्रीगेट के सामने सॉर्ट ऑपरेटर जोड़ें:

select OrderID, AVG(Quantity)
from Sales.OrderLines
group by OrderID
OPTION (ORDER GROUP) 

विकल्प (HASH ग्रुप) के साथ, QO हमेशा हैश एग्रीगेट का चयन करेगा:

select OrderID, AVG(Quantity)
from Sales.OrderLines
group by OrderID
OPTION (HASH GROUP) 

तेज पंक्तियों का संकेत

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

select OrderID, AVG(Quantity)
from Sales.OrderLines
group by OrderID
OPTION (FAST 20) 

यूनिअन संकेत देते हैं

जब आप दो क्वेरी परिणामों पर UNION ऑपरेटर का उपयोग करते हैं, तो क्वेरी ऑप्टिमाइज़र (QO) दो परिणाम सेटों का एक संघ बनाने के लिए निम्नलिखित ऑपरेटरों का उपयोग कर सकता है:

  • मर्ज (संघ)
  • कॉनकैट (संघ)
  • हैश मैच (संघ)

आप स्पष्ट रूप से निर्दिष्ट कर सकते हैं कि किस ऑपरेटर को विकल्प () संकेत का उपयोग किया जाना चाहिए:

select OrderID, OrderDate, ExpectedDeliveryDate, Comments
from Sales.Orders
where OrderDate > DATEADD(day, -1, getdate())
UNION
select PurchaseOrderID as OrderID, OrderDate, ExpectedDeliveryDate, Comments
from Purchasing.PurchaseOrders
where OrderDate > DATEADD(day, -1, getdate())
OPTION(HASH UNION)
-- or OPTION(CONCAT UNION)
-- or OPTION(MERGE UNION)

MAXDOP विकल्प

इस विकल्प को निर्दिष्ट करने वाले क्वेरी के लिए समानता की अधिकतम डिग्री निर्दिष्ट करता है।

SELECT OrderID,
    AVG(Quantity)
FROM Sales.OrderLines
GROUP BY OrderID
OPTION (MAXDOP 2);

यह विकल्प sp_configure और संसाधन गवर्नर के MAXDOP कॉन्फ़िगरेशन विकल्प को ओवरराइड करता है। यदि MAXDOP को शून्य पर सेट किया जाता है, तो सर्वर समानता की अधिकतम डिग्री चुनता है।

संकेत संकेत

इंडेक्स संकेत का उपयोग किसी विशिष्ट इंडेक्स का उपयोग करने के लिए किसी क्वेरी को बाध्य करने के लिए किया जाता है, इसके बजाय SQL सर्वर के क्वेरी ऑप्टिमाइज़र को यह चुनने की अनुमति देता है कि यह सबसे अच्छा इंडेक्स क्या है। कुछ मामलों में आप सूचकांक को निर्दिष्ट करके लाभ प्राप्त कर सकते हैं जो एक क्वेरी का उपयोग करना चाहिए। आमतौर पर SQL सर्वर का क्वेरी ऑप्टिमाइज़र क्वेरी के लिए अनुकूल सबसे अच्छे इंडेक्स को चुनता है, लेकिन लापता / आउटडेटेड आँकड़ों या विशिष्ट आवश्यकताओं के कारण आप इसे बाध्य कर सकते हैं।

SELECT *
FROM mytable WITH (INDEX (ix_date))
WHERE field1 > 0
    AND CreationDate > '20170101'


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow