আমি জানি যে VARCHAR(MAX)/NVARCHAR(MAX)
কলামগুলি যখন ব্যবহৃত হয় তখন তথ্যগুলি সারির বাইরে সংরক্ষণ করা হয় ...
আসলে, এটি large value types out of row
বিকল্পের সেটিং এর উপর নির্ভর করে , যা ব্যবহার করে সেট করা যায় sp_tableoption
। ডকুমেন্টেশন থেকে :
ডিফল্ট জন্য MAX
মান সংরক্ষণ করার জন্য ইন-সারি , 8000 বাইট, আপ যদি তারা মাপসই করা হবে। আপনি যদি sp_tableoption
না ডিফল্ট পরিবর্তন করতে ব্যবহার না করেন তবে আপনার MAX
ডেটা সম্ভবত সারি-ইন সংরক্ষণ করা হবে।
এটি বলেছে MAX
যে মানগুলির জন্য ডেটা ধরণের ব্যবহার করা খারাপ অভ্যাস যা 8000 বাইটের বেশি হবে না - পরিবর্তে একটি নন-ম্যাক্স প্রকার ব্যবহার করুন। অন্য যে কোনও বিষয় বাদ দিয়ে, MAX
প্রকারের সাথে কাজ করার সময় পারফরম্যান্স প্রায়শই উল্লেখযোগ্যভাবে দরিদ্র হয় , কারণ এসকিউএল সার্ভার অবশ্যই ডেটা 2 জিবি পর্যন্ত হতে পারে এমন ডেটা মোকাবেলার জন্য প্রস্তুত থাকতে হবে।
প্রতিটি ক্ষেত্র সারি থেকে সঞ্চিত বা কেবল সর্বোচ্চ?
শুধু MAX
বেশী। তদ্ব্যতীত, পূর্ববর্তী-সারি MAX
কলামটি যদি সারি-সারি সরানো হয় তবে কেবলমাত্র সেই সারিটির কলামটিই প্রভাবিত হবে। এটি অফ-সারি LOB
কাঠামোর পয়েন্টার দ্বারা সারি-সারি প্রতিস্থাপন করা হয় । এমন পরিস্থিতিতেও রয়েছে যেখানে নন-ম্যাক্স কলামগুলি সারি থেকে সরানো হতে পারে।
আপনি যদি পুরো রেকর্ডটি পড়ার জন্য টেবিলের ক্লাস্টারড ইনডেক্স ব্যবহার করছেন, সারি থেকে সঞ্চিত ক্ষেত্রগুলি কি খুব বেশি পড়তে পারে?
ক্লাস্টারড ইনডেক্স স্ক্যান করা কেবল ইন-সারি ডেটা অনুসরণ করে। যদি ক্যোয়ারির জন্য অফ-সারি ডেটা প্রয়োজন হয় তবে এটি ইন-সারি পয়েন্টার ব্যবহার করে সন্ধান করা হবে।