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);
现在插入一些具有 8000 字节值的行,VARCHAR(MAX)并检查 DMF:
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');
超过 8000 字节的值不能“内联”存储。它们存储在 LOB 页面上。您可以通过sys.dm_db_index_physical_stats看到这一点。从一个简单的表格开始:
现在插入一些具有 8000 字节值的行,
VARCHAR(MAX)
并检查 DMF:索引中没有 LOB 页:
但是,如果我添加具有 8001 字节值的行:
现在,我刚刚插入的每一行的索引中都有 1 个 LOB 页:
您还可以使用
SET STATISTICS IO ON;
正确的查询来查看此内容。考虑以下仅查看 8000 字节行的查询:执行结果:
如果我改为查询 8001 字节的行:
现在我看到 lob 读取: