表空间算法

原创 2007年09月23日 19:35:00
很多人用数据库,都不知对表空间大小的计算方法,有效的计算表空间的大小可以有效的提高效率和了解表的存储,达到更好的控制表。以下列出表空间的计算方法,以供大家参考。
数据类型          大小
char/binary         在定义中指定的大小
varchar/varbinary    实际的数据大小,使用一个平均估计值
int                4字节
smallint            2字节
tinyint             1字节
float              8字节
float(b)         4字节(精确到一至七位小数的数字)
float(c)         8字节(精确到八至十五位小数的数字)
double precision     8字节
real               4字节
money             8字节
small money        4字节
datetime           8字节
smalldatetime       4字节
bit                1字节
decimal/numeric     根据精度,2-17字节
text/image          每个表行16字节,每个not null列至少加上2KB的页
timestamp          8字节
允许NULL的列定义为var数据类型
数值精度          大小
0-9              5字节
10-19            9字节
20-28            13字节
29-38            17字节
1.带簇索引表的计算方法
数据长度计算方法:
.不含可变长度字段的行大小=2+(以字节计算的列的大小的合计值)
.含可变长度字段的行大小=2+(以字节计算的固定长度列的大小的合计值)+(可变长度列的平均大小的合计值)+(可变长度列的个数+1)+2
.一页中的行数=8060/(行的大小)(只舍不入)
.8KB数据页的数目=(需要的行数)/(每页的行数)(只入不舍)
簇索引长度方法:
.不含可变长度字段的行大小=5+(以字节计算的列的大小的合计值)
.含可变长度字段的行大小=5+(以字节计算的固定长度列的大小的合计值)+(可变长度列的平均大小的合计值)+(可变长度列的个数+1)+2
.一页中的行数=8060/(行的大小)-2
.在N级上的索引页数=(数据页数)/(一页中簇索引行数)(只入不舍)
例:有一个表,有一个int型簇索引,估计5,000,000行所需的空间,假定还有四个23字节长的var类型列,且列的平均长度为定义长度的60%。
2+4+(92*60%)+(4+1)+2=63
8060/63=127
5000000/127=39371
5+4=9
8060/9-2=894
39371/894=45
45/894=1
数据库表所需的8KB页的总数:
data page:39371
index page(level 1):1
index page(level 0):45
total number of 8KB pages:39417(or about 308MB)
2.带非簇索引表的计算方法
.索引行大小=7+(固定长度关键字的长度的合计值)
.叶子索引行大小=9+(固定长度关键字的长度的合计值)+(可变长度关键字的长度的合计值)+(可变长度关键字的个数)+1
.每页的叶子行数=8060/(叶子索引行大小)(只舍不入)
.叶子页数=(表中的行数)/(每页的叶子行数)(只入不舍)
.非叶子行大小=叶子索引行大小+4
.每页的非叶子索引行数=8060/(非叶子行大小)-2
.在N级上的索引页数=(叶子页数)/(每页的非叶子索引行数)(只入不舍)
例:有一个表,有一个六字节长的非簇索引,估计5,000,000行所需的空间。
7+6=13
8060/13=620
5000000/620=8065
13+4=17
8060/17-2=473
8065/473=18
18/473=1
数据表所需的8KB页的总数:
leaf page:8065
leaf index page(level 1):1
leaf index page(level 0):18
total number of 8KB pages:8084 or about 64MB
 

表空间的作用

SQL Server数据库与Oracle数据库之间最大的区别要属表空间设计。Oracle数据库开创性地提出了表空间的设计理念,这为Oracle数据库的高性能做出了不可磨灭的贡献。可以这么说,Oracl...
  • qq_22642239
  • qq_22642239
  • 2016年12月22日 10:56
  • 906

ORACLE收缩表空间

最近导一个空库到数据库后,发现占用的表空间非常大,执行表收缩(SHRINK SPACE CASCADE)后,发现实际占用的空间不到1%。 但是收缩表空间大小提示错误     ALTER DATAB...
  • aptweasel
  • aptweasel
  • 2013年05月29日 11:05
  • 29226

表空间和表分区的理解

1.表空间:是一个或多个数据文件的集合,主要存放的是表,所有的数据对象都存放在指定的表空间中;一个数据文件只能属于一个表空间,一个数据库空间由若干个表空间组成,其中包括: a.系统表空间:10g以前...
  • pzasdq
  • pzasdq
  • 2015年11月03日 16:34
  • 1549

Oracle 表空间详解

目录目录 表空间概述 表空间的分类 默认表空间 查看默认的永久表空间 查看默认的TEMP表空间 查看默认的表空间类型 逻辑结构到物理结构的映射 对表空间的操作 查看表空间使用情况 查看数据库拥有的表空...
  • Jmilk
  • Jmilk
  • 2016年06月07日 00:28
  • 19986

system表空间用满解决 方法

system表空间爆满无法自动扩展
  • wangl2014
  • wangl2014
  • 2016年06月25日 08:41
  • 10021

oracle表空间类型

表空间可以按4种方式分类 一、按数据文件的类型,分为: 大文件表空间(bigfile tablespace)此为10g新增功能 小文件表空间(smallfile tablespace)此为创建时...
  • lu8000
  • lu8000
  • 2013年05月24日 16:50
  • 1736

Oracle创建/删除表空间和用户

创建表空间和用户开启Oracle服务 Win+R输入cmd打开命令提示符窗口 登录 sqlplus /nolog connect /as sysdba; 先创建表空间 create tab...
  • u012424148
  • u012424148
  • 2016年08月27日 23:23
  • 3620

Oracle数据库实例、用户、表、表空间之间关系

先需要明白数据库的物理结构是由数据库的操作系统文件所决定,每一个Oracle数据库是由三种类型的文件组成:数据文件、日志文件和控制文件。数据库的文件为数据库信息提供真正的物理存储。     每一个O...
  • z69183787
  • z69183787
  • 2014年04月12日 13:20
  • 6301

查看表空间使用的两条常用SQL

1. 查看表空间大小: SELECT tablespace_name, SUM(bytes)/1024/1024 total FROM DBA_FREE_SPACE GROUP BY tablesp...
  • bisal
  • bisal
  • 2014年12月08日 09:50
  • 1978

Oracle 删除表中记录 如何释放表及表空间大小

1.查看一个表所占的空间大小: SELECT bytes/1024/1024 ||'MB' TABLE_SIZE ,u.* FROM USER_SEGMENTS U WHERE U.SEGMENT_...
  • xixi_666
  • xixi_666
  • 2015年09月02日 16:17
  • 6625
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:表空间算法
举报原因:
原因补充:

(最多只允许输入30个字)