मुझे पता है कि जब VARCHAR(MAX)/NVARCHAR(MAX)
कॉलम का उपयोग किया जाता है तो डेटा पंक्ति से बाहर संग्रहीत किया जाता है ...
दरअसल, यह large value types out of row
विकल्प की सेटिंग पर निर्भर करता है , जिसका उपयोग करके सेट किया जा सकता है sp_tableoption
। से प्रलेखन :
डिफ़ॉल्ट के लिए है MAX
मान संग्रहीत करने के लिए इन-पंक्ति , 8000 बाइट्स, ऊपर अगर वे फिट। जब तक आपने sp_tableoption
डिफ़ॉल्ट को बदलने के लिए उपयोग नहीं किया है, तब तक आपका MAX
डेटा सबसे अधिक बार पंक्ति में संग्रहीत किया जाएगा।
उस ने कहा, MAX
मानों के लिए डेटा प्रकारों का उपयोग करना खराब अभ्यास है जो कभी भी 8000 बाइट्स से अधिक नहीं होगा - इसके बजाय एक गैर-मैक्स प्रकार का उपयोग करें। किसी अन्य चीज़ के अलावा, प्रदर्शन अक्सर MAX
प्रकारों के साथ काम करते समय काफी खराब होता है , क्योंकि SQL सर्वर को डेटा से निपटने के लिए तैयार रहना चाहिए जो कि आकार में 2GB तक हो सकता है।
क्या प्रत्येक क्षेत्र पंक्ति से बाहर है या केवल अधिकतम हैं?
केवल MAX
लोगों को। इसके अलावा, यदि कोई पूर्व-पंक्ति MAX
स्तंभ बंद पंक्ति में ले जाया जाता है, तो केवल उस पंक्ति में वह स्तंभ प्रभावित होता है। इसे पॉइंटर से ऑफ-रो LOB
संरचना में प्रतिस्थापित किया जाता है । ऐसी परिस्थितियां भी होती हैं, जहां गैर-मैक्स कॉलम को ऑफ-रो ले जाया जा सकता है।
यदि आप पूरे रिकॉर्ड को पढ़ने के लिए तालिका के क्लस्टर किए गए इंडेक्स का उपयोग कर रहे हैं, तो क्या फ़ील्ड को पंक्ति से बाहर संग्रहित किया गया है, भी पढ़ें?
क्लस्टर किए गए अनुक्रमणिका को स्कैन करना केवल इन-पंक्ति डेटा को ट्रैवर्स करता है। यदि क्वेरी के लिए ऑफ-रो डेटा आवश्यक है, तो इन-रो पॉइंटर का उपयोग करके इसे देखा जाता है।