管理数据库 -学习sql server2005 step by step(三)
3.1为了有效地实现数据库的管理工作,我们必须至少解决8个方面的问题。
- 数据库文件的存储问题
- 数据库的大小问题
- 确定数据库运行时的行为特征
- 数据库的更改问题
- 数据库的扩大问题
- 数据库的收缩问题
- 如何兼顾数据库的事务处理效率和决策支持效率问题
- 数据库的性能优化问题等。
3.2数据库文件和文件组的基本特征
例子:SQL SERVER单页数据存储行数计算
应用示例:
-- 创建2个测试表
CREATE TABLE [dbo].[Table_2019]([Data] [nchar](2019) NOT NULL)
CREATE TABLE [dbo].[Table_2020]([Data] [nchar](2020) NOT NULL)
go
-- 填充数据
declare @i int
set @i = 0
while(@i < 20)
begin
insert Table_2019(Data) values('')
insert Table_2020(Data) values('')
select @i = @i + 1
end
go
查看每个表所占用的空间,结果:
Table_2020 表数据占了 160kb ,Table_2019 表数据占了 80 kb
注意
SQL Server页定义:
在 SQL Server 中,页的大小为 8 KB。这意味着 SQL Server 数据库中每 MB 有 128 页。每页的开头是 96 字节的标头,用于存储有关页的系统信息
在 SQL Server 2005 中,行不能跨页,但是行的部分可以移出行所在的页,因此行实际可能非常大。页的单个行中的最大数据量和开销是 8,060 字节 (8 KB)。
在数据页上,数据行紧接着标头按顺序放置。页的末尾是行偏移表,对于页中的每一行,每个行偏移表都包含一个条目。每个条目记录对应行的第一个字节与页首的距离。行偏移表中的条目的顺序与页中行的顺序相反。
计算:
计算总的行大小:
Row_Size = Fixed_Data_Size + Variable_Data_Size + Null_Bitmap + 4
公式中的值 4 是数据行的行标题开销。
由于nchar是固定长度,所以Variable_Data_Size=0
保留行中称为 Null 位图的部分以管理列的为空性。计算其大小:
Null_Bitmap = 2 + ((Num_Cols + 7) / 8)
由于只有一列,所以Null_Bitmap = 3
由以上原则可以计算:
nchar(2019): 2019×2+0+3+4=4045
nchar(2020): 2020×2+0+3+4=4047
微软给出的每页容纳行数计算公式:
计算每页的行数(每页有 8096 个可用字节):
Rows_Per_Page = 8096 / (Row_Size + 2)
因为行不跨页,所以每页的行数应向下舍入到最接近的整数。公式中的数值 2 是计算行数时引入的行大小余量。
nchar(2019): 8096/(4045+2)=2.000494193229
nchar(2020): 8096/(4047+2)=1.999506050876
据以上计算,可以得出,一页可以存储只有一列nchar(2019)数据的行数为2行,而存储只有一列nchar(2020)数据的行数为1行。
3.3创建数据库
3.4 更改数据库名称
- 第一种方式是设置数据库为自动增长方式,可以在创建数据库时设置。
- 第二种方式是直接修改数据库的数据文件或日志文件的大小
- 第三种方式是在数据库中增加新的次要数据文件或日志文件。
- 第一种方式是设置数据库为自动收缩,这可以通过设置AUTO_SHRINK数据库选项实现。
- 第二种方式是收缩整个数据库的大小,这可以通过使用DBCC SHRINKDATABASE命令完成。
- 第三种方式是收缩指定的数据文件,这可以使用DBCC SHRIKNFILE命令实现。
除了这些命令方式之外,也可以使用SQL Server Management Studio工具来收缩数据库
打开压缩对话框之后弹出下列对话框,可以直接点击确定,也可以勾选复选框,进行比例压缩。
3.6其他相关操作
分离数据库
附加数据库
删除数据库
相关学习可以看《SQL Server 2005数据库管理高级教程》csdn上的免费书吧。