表中一条数据所占用大小(磁盘空间)

pennyzhueng 2003-08-22 02:41:06
现在需要统计某一个表中一条数据在三个情况时所占用的大小(磁盘空间)
1:最小--只填写那些不允许为空的字段 (按照各数据类型的大小计算)
2:最大--把所有字段都填写 (按照各数据类型的大小计算)
3:平均--表中所有数据实际所占的平均值
...全文
245 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
pennyzhueng 2003-08-25
  • 打赏
  • 举报
回复
哇..这..这.不是很麻烦吗?我现在有差不多一百多个表啦...
liukaiii 2003-08-25
  • 打赏
  • 举报
回复
我是把各字段用手工加一下
pennyzhueng 2003-08-25
  • 打赏
  • 举报
回复
CrazyFor(太阳下山明朝依旧爬上来) :
现在我需要查Text类型的,该如何实现啊??
pennyzhueng 2003-08-25
  • 打赏
  • 举报
回复
谢谢各位大哥.不过小弟现在还在搞了,因为正如各位所说的,要考虑的问题实在太多了
happydreamer 2003-08-23
  • 打赏
  • 举报
回复

计算数据表格长度的步骤
1. 计算表中的记录长度,可以将表中每列的长度相加求得
2. 将8092除以第1步的行长,并舍如为最近似数,8092是一个数据页能保存的实际数据量,舍入的原因是行不能跨页
3. 将所要的行数除以第2步的结果,即可得到表格所需的数据页数
4. 将3步的结果乘以8192(数据页长度,字节数),既得到表格所占用的磁盘字节数

例子
talbe 10000个记录
custom varchar(20)
address varchar(50)
city varchar(30)
state char(15)
zip char(10)
计算
1. 字段长度和 125
2. 8092除以125舍入为近似值64,得到一页能放的行数
3. 10000行除以一页行数(64)舍入为最近似值 157 因为部分行会移到新的数据页
4. 将157乘以 8192得到表格约占用1570000字节
dlkfth 2003-08-23
  • 打赏
  • 举报
回复
happydreamer(小黑-潜水中)
呵呵如果有填冲因子那??
实际长度8092 ?
8060那?
TaoGeGe 2003-08-23
  • 打赏
  • 举报
回复
通常來說,記錄的大小就是每個相關字段長度的加總。要求非常精確的話要考慮的就很多了
CrazyFor 2003-08-22
  • 打赏
  • 举报
回复
呵呵~~~要这么精确还得考虑Varchar类型的字段,它的实际占用空间是字符串长度加1个字节.
pennyzhueng 2003-08-22
  • 打赏
  • 举报
回复
但..Microsoft® SQL Server™ 优化用于 bit 列的存储。如果一个表中有不多于 8 个的 bit 列,这些列将作为一个字节存储。如果表中有 9 到 16 个 bit 列,这些列将作为两个字节存储
这个又怎样算呢??
CrazyFor 2003-08-22
  • 打赏
  • 举报
回复
占用字节数就是记录的最大长度,不包含TEXT类型.

SELECT
(case when a.colorder=1 then d.name else '' end) N'表名',
a.colorder N'字段序号',
a.name N'字段名',
(case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '√'else '' end) N'标识',
(case when (SELECT count(*)
FROM sysobjects
WHERE (name in
(SELECT name
FROM sysindexes
WHERE (id = a.id) AND (indid in
(SELECT indid
FROM sysindexkeys
WHERE (id = a.id) AND (colid in
(SELECT colid
FROM syscolumns
WHERE (id = a.id) AND (name = a.name))))))) AND
(xtype = 'PK'))>0 then '√' else '' end) N'主键',
b.name N'类型',
a.length N'占用字节数',
COLUMNPROPERTY(a.id,a.name,'PRECISION') as N'长度',
isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0) as N'小数位数',
(case when a.isnullable=1 then '√'else '' end) N'允许空',
isnull(e.text,'') N'默认值',
isnull(g.[value],'') AS N'字段说明'
--into ##tx

FROM syscolumns a left join systypes b
on a.xtype=b.xusertype
inner join sysobjects d
on a.id=d.id and d.xtype='U' and d.name<>'dtproperties'
left join syscomments e
on a.cdefault=e.id
left join sysproperties g
on a.id=g.id AND a.colid = g.smallid
order by object_name(a.id),a.colorder

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧