是否可以找出表中各列的数据大小(KB或MB)?我有一个脚本告诉我每个表的物理大小,但我想知道数据库中的某些列占用了多少,特别是当我将XML存储在列中时。
任何帮助非常感谢
干杯
答案 0 :(得分:22)
你应该可以使用datalength函数,比如
select sum(datalength(yourfield))
from yourtable
这将汇总表中该字段的所有条目的数据长度 - 它不会考虑诸如可变长度字段指针,可空性位图中的空间等开销。
答案 1 :(得分:2)
对于“表的所有列” 的视图大小,您可以首先使用以下命令生成表的字段:
SELECT 'SUM(DATALENGTH('+Column_name+')) / (1024*1024) as '+Column_name+'_MB,'
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = '--TABLE_NAME--'
然后运行以下查询:
SELECT
/*result previous query (with remove last comma)*/
FROM --TABLE_NAME--
答案 2 :(得分:1)
选择SUM(DATALENGTH(columnsA))/ 1024.0 AS KB
答案 3 :(得分:0)
这将返回特定数据库中的所有列及其数据大小,并且可以轻松地更新为仅返回特定表或列的数字。
USE [YourDatabase]
IF OBJECT_ID('tempdb..#temp') IS NOT NULL DROP TABLE #temp
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
CREATE TABLE #temp (tablename varchar(max), columnname varchar(max), sizeinkb float)
DECLARE MY_CURSOR Cursor LOCAL FAST_FORWARD
FOR SELECT table_name, column_name FROM INFORMATION_SCHEMA.COLUMNS
Open My_Cursor
DECLARE @table varchar(max), @column varchar(max)
Fetch NEXT FROM MY_Cursor INTO @table, @column
While (@@FETCH_STATUS <> -1)
BEGIN
DECLARE @sql varchar(1000) = 'INSERT #temp SELECT ''' + @table + ''', ''' + @column + ''', sum(datalength(' + @column + ')) / 1024.0 FROM ' + @table
EXEC (@sql)
FETCH NEXT FROM MY_CURSOR INTO @table, @column
END
CLOSE MY_CURSOR
DEALLOCATE MY_CURSOR
GO
SELECT * FROM #temp ORDER BY 3 DESC