एक आदेश परिणाम सेट की उपस्थिति, एक ORDER BY
खंड के बिना , अक्सर सूचकांक क्रम में पंक्तियों को स्कैन करने वाली स्कैन से परिणाम होता है। एक इंडेक्स-ऑर्डर स्कैन को आमतौर पर डिफ़ॉल्ट READ COMMITTED
आइसोलेशन स्तर के तहत क्यों चुना जाता है, इसका कारण यह है कि यह अवांछित कंसीलर विसंगतियों की संभावना को कम कर देता है जैसे कि एक ही पंक्ति को कई बार एनकाउंटर करना, या कुछ पंक्तियों को पूरी तरह से छोड़ देना। यह कई स्थानों पर विस्तृत है, जिसमें अलगाव स्तरों के बारे में लेखों की श्रृंखला शामिल है।
एक साथ NOLOCK
तालिका संकेत, इस व्यवहार में ढील है, और तालिका के लिए उपयोग अधिक सहिष्णु के तहत किया जाता है READ UNCOMMITTED
अलगाव के स्तर है, जो हो सकता है आवंटन के क्रम में डेटा स्कैन के बजाय सूचकांक आदेश। जैसा कि उस लिंक में वर्णित है, एक आवंटन-ऑर्डर या इंडेक्स-ऑर्डर स्कैन का उपयोग करने के बारे में निर्णय भंडारण इंजन पर छोड़ दिया गया है। यह विकल्प क्वेरी प्लान में बदलाव के बिना निष्पादन के बीच बदल सकता है ।
यह बहुत ही सारगर्भित लग सकता है, लेकिन एडवेंचरवर्क्स 2012 डेटाबेस के खिलाफ अनडूएक्टेड फ़ंक्शंस का उपयोग करके कुछ प्रश्नों के साथ अधिक आसानी से प्रदर्शित किया जा सकता है ।
USE AdventureWorks2012;
GO
-- Appears to be ordered by BusinessEntityID
-- File:Page:Slot goes up and down several times
-- Show physical locations with sys.fn_PhysLocFormatter (undocumented)
SELECT
P.BusinessEntityID,
[(File:Page:Slot)] =
sys.fn_PhysLocFormatter(%%physloc%%)
FROM Person.Person AS P;
-- Same query with TABLOCK or NOLOCK
-- Allocation-order (IAM) scan
-- Now appears to be ordered by File:Page:Slot instead of BusinessEntityID
SELECT P.BusinessEntityID,
[(File:Page:Slot)] =
sys.fn_PhysLocFormatter(%%physloc%%)
FROM Person.Person AS P WITH (NOLOCK);
पॉल व्हाइट से मामूली संशोधन के साथ प्रश्नों को उधार लिया गया है ।
अंत में, बस स्पष्ट होने के लिए, यह उत्तर एक निर्धारित परिणाम सेट की उपस्थिति के बारे में है । वहाँ है कोई गारंटी प्रस्तुति आदेश एक शीर्ष स्तर के बिना ORDER BY
।
एक आबंटन-ऑर्डर स्कैन कई अन्य परिस्थितियों में हो सकता है, जैसे कि जब एक टेबल-लेवल लॉक हासिल किया जाता है, या डेटाबेस केवल-पढ़ने के लिए मोड में होता है। समानांतरवाद उस आदेश को भी प्रभावित कर सकता है जिसमें डेटा वापस आ जाता है। मुख्य बिंदु यह है कि बिना ORDER BY
, ऑर्डर डेटा वापस लौटाए बिना समय के साथ भिन्न हो सकता है।