SQL数据库空间的管理

SQL数据库空间的管理总结:


主数据文件:主数据文件是数据库的起点,每个数据库都有一个主数据文件,文件名 XXX.mdf
辅助数据文件:数据库的辅助数据文件可有可无,有的数据库也含有多个辅助数据文件,文件名 XXX.ndf


数据文件的存储结构
  SQL中数据存储的基本单位是页,磁盘I/O操作是在页级执行,即SQL读写数据的最小单位是以8KB为单位的页。
  区是8个物理上连续的页集合,用来有效的管理页,每个区的大小即为64KB。若区内8个页属于同一张表,则称为统一区;若属于不同的表,称混合区。
  数据库中没MB有128页(1024/8),每页开头是一个96字节的页头。
  
表存储结构
  1.表没有任何索引的表
        表是按照Heap(堆)的结构存储,只有一个partition。对于一个select语句,SQL会先查询IAM页,然后根据IAM提供的信息,遍历每个区,如果IAM页受损,则整张表的结构会混乱,数据基本无法修复。
  2.有非聚集索引而没有聚集索引的表
        每个非聚集索引都有一个相对应的partition,对于partition下面每个分配单元,都有一个连接指向root page(根页),通过指针相连,是一个完整的树形结构,
        其叶子节点只是有文件号、页号、行号的连接,数据真正存储是以堆存放的。
  3.表中有聚集索引
        表中的聚集索引,索引号是1,也有一个对应的partition,也有一个连接指向根页,但对应聚集索引来说,
        叶子节点存放的是真正的数据,而不像非聚集索引那样是连接。
        
  在同样的字段上,建立聚集索引并没有增加表格的大小,而建立非聚集索引会增加不小的空间。
  select、update、delete有记录搜索的动作,所以有聚集索引的查、改、删会大大提高性能;而insert有无聚集索引不影响插入速度。
  因select、update、delete动作频繁,在此建议在一个的表格上建立一个聚集索引。
  
数据删除:
  用delete删除数据,还会有数据库的日志记录--用ApexSQL Log 可查看,因每一条记录对应的是行级别的删除。
  用Truncate删除数据是找不到日志记录的(Truncate命令是不记录日志的),若有成千上万条数据,建议使用Truncate来删除,这样可以避免日志文件的大量增长。
      但若想用日志备份来恢复到原来的状态,对于Truncate删除的操作是无法做到的。
      
      
tempdb的空间使用:
  tempdb系统数据库是一个全局资源,可连接到SQL上的所有实例用户使用。
   主要保存:
      1.用户对象  --如用户定义的表和索引、系统表和索引、全局临时表和索引、局部临时表和索引、table变量、表值函数返回的表
      2.内部对象
      3.版本存储区
           
 表里字段的定义会直接影响到将来表的大小,但是表格上索引的定义会影响到SQL server 使用什么样的结构来存储整个表格,是用堆还是B树,结构的不同会对表格的大小、数据访问、空间管理产生巨大的影响。     
      
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值