Sql-Server
計算每行的總“行上”字節數……簡單的方法
我們要計算表中每一行的總“行上”儲存字節數。正如我們所理解的,我們必須將每列的 DATALENGTH() 相加,同時還要考慮 NULL 和諸如 VARCHAR(MAX) 之類的東西,它們“在行上”只有一個 24 字節的指針。我們知道每一行也有一些成本,這些成本在下面的查詢中沒有考慮。
SELECT ROW_ID, CASE WHEN COLUMNPROPERTY(OBJECT_ID('EXAMPLE_TABLE'),'COL1','PRECISION') = -1 THEN 24 ELSE ISNULL(DATALENGTH(COL1), 1) END + CASE WHEN COLUMNPROPERTY(OBJECT_ID('EXAMPLE_TABLE'),'COL2','PRECISION') = -1 THEN 24 ELSE ISNULL(DATALENGTH(COL2), 1) END + CASE WHEN COLUMNPROPERTY(OBJECT_ID('EXAMPLE_TABLE'),'COL3','PRECISION') = -1 THEN 24 ELSE ISNULL(DATALENGTH(COL3), 1) END + ... ... AS ROW_SIZE FROM EXAMPLE_TABLE ORDER BY ROW_SIZE DESC ;
什麼野獸!這只是一個近似值。
然後我們發現
DBCC SHOWCONTIG ('EXAMPLE_TABLE') WITH TABLERESULTS
它返回MaximumRecordSize。這表明 SQL Server 中已經存在一種算法,它能夠計算行的確切大小。
我們如何直接訪問該算法?
我們如何直接訪問該算法?
就這個問題的答案而言,具體來說,您無法直接訪問它。沒有什麼可以說
SELECT GetMeMaxRowSize(MyTable, MyPartition, MyIndex)
的。但是,正如LowlyDBA所指出的,您可以使用sys.dm_db_index_physical_stats為您提供比 ShowContig 更多的資訊。非常有趣的是,如果您執行
DBCC SHOWCONTIG()
,擷取已棄用的資訊,您應該會看到一條消息,使用上述 DMV 代替ShowContig
命令。