8000 বাইটের বেশি হওয়া মানগুলি "ইনলাইন" সংরক্ষণ করা যায় না। এগুলি এলওবি পৃষ্ঠায় সঞ্চিত রয়েছে। আপনি এটি sys.dm_db_index_physical_stats সহ দেখতে পারেন । একটি সাধারণ টেবিল দিয়ে শুরু করুন:
USE tempdb;
DROP TABLE IF EXISTS #LOB_FOR_ME;
CREATE TABLE #LOB_FOR_ME (
ID BIGINT,
MAX_VERNON_WAS_HERE VARCHAR(MAX)
);
CREATE INDEX IX ON #LOB_FOR_ME (ID) INCLUDE (MAX_VERNON_WAS_HERE);
VARCHAR(MAX)
কলামের জন্য 8000 বাইট নেওয়ার সাথে মান সহ কয়েকটি সারি প্রবেশ করান এবং ডিএমএফ দেখুন:
USE tempdb;
INSERT INTO #LOB_FOR_ME
SELECT 1, REPLICATE('Z', 8000)
FROM master..spt_values;
SELECT index_level, index_type_desc, alloc_unit_type_desc, page_count, record_count
FROM sys.dm_db_index_physical_stats(DB_ID(), OBJECT_ID('#LOB_FOR_ME'), 2, NULL , 'DETAILED');
সূচীতে কোনও এলওবি পৃষ্ঠা নেই:
╔═════════════╦════════════════════╦══════════════════════╦════════════╦══════════════╗
║ index_level ║ index_type_desc ║ alloc_unit_type_desc ║ page_count ║ record_count ║
╠═════════════╬════════════════════╬══════════════════════╬════════════╬══════════════╣
║ 0 ║ NONCLUSTERED INDEX ║ IN_ROW_DATA ║ 2540 ║ 2540 ║
║ 1 ║ NONCLUSTERED INDEX ║ IN_ROW_DATA ║ 18 ║ 2540 ║
║ 2 ║ NONCLUSTERED INDEX ║ IN_ROW_DATA ║ 1 ║ 18 ║
╚═════════════╩════════════════════╩══════════════════════╩════════════╩══════════════╝
তবে আমি যদি 8001 বাইটের মান সহ সারি যুক্ত করি:
USE tempdb;
INSERT INTO #LOB_FOR_ME
SELECT 2, REPLICATE(CAST('Z' AS VARCHAR(MAX)), 8001)
FROM master..spt_values;
SELECT index_level, index_type_desc, alloc_unit_type_desc, page_count, record_count
FROM sys.dm_db_index_physical_stats(DB_ID(), OBJECT_ID('#LOB_FOR_ME'), 2, NULL , 'DETAILED');
আমি সবে সন্নিবেশ করা প্রতিটি সারির সূচীতে এখন আমার 1 টি এলওবি পৃষ্ঠা রয়েছে:
╔═════════════╦════════════════════╦══════════════════════╦════════════╦══════════════╗
║ index_level ║ index_type_desc ║ alloc_unit_type_desc ║ page_count ║ record_count ║
╠═════════════╬════════════════════╬══════════════════════╬════════════╬══════════════╣
║ 0 ║ NONCLUSTERED INDEX ║ IN_ROW_DATA ║ 2556 ║ 5080 ║
║ 1 ║ NONCLUSTERED INDEX ║ IN_ROW_DATA ║ 18 ║ 2556 ║
║ 2 ║ NONCLUSTERED INDEX ║ IN_ROW_DATA ║ 1 ║ 18 ║
║ 0 ║ NONCLUSTERED INDEX ║ LOB_DATA ║ 2540 ║ 2540 ║
╚═════════════╩════════════════════╩══════════════════════╩════════════╩══════════════╝
আপনি এটি এবং SET STATISTICS IO ON;
সঠিক প্রশ্নের সাথেও দেখতে পারেন । নিম্নলিখিত ক্যোয়ারীটি বিবেচনা করুন যা কেবল 8000 বাইট সহ সারিগুলিতে দেখায়:
SELECT SUM(LEN(MAX_VERNON_WAS_HERE))
FROM #LOB_FOR_ME
WHERE ID = 1;
মৃত্যুদন্ড কার্যকর করার পরে ফলাফল:
স্ক্যান কাউন্ট 1, লজিকাল 2560, শারীরিক 0 0, পঠন-এগিয়ে 0, লব লজিকাল 0, লব শারীরিক 0
আমি যদি এর পরিবর্তে 8001 বাইটের সাহায্যে সারিগুলিকে জিজ্ঞাসা করি:
SELECT SUM(LEN(MAX_VERNON_WAS_HERE))
FROM #LOB_FOR_ME
WHERE ID = 2;
এখন আমি দেখতে পাচ্ছি:
স্ক্যান কাউন্ট 1, লজিকাল রিডিং 20, ফিজিকাল রিড 0, রিড-ফরোডড রিড 0, লব লজিকাল রিডিং 5080, লব ফিজিকাল রিড 0, লব রিড-ফরোয়ার্ড 0 0