1 / 6
文档名称:

数据库实验心得.docx

格式:docx   大小:17KB   页数:6页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

数据库实验心得.docx

上传人:gxngqvk 2018/11/13 文件大小:17 KB

下载得到文件列表

数据库实验心得.docx

文档介绍

文档介绍:数据库实验心得
我在sqlserver索引基础知识系列中,第一篇就讲了记录数据的基本格式。那里主要讲解的是,数据库的最小读存单元:数据页。一个数据页是8k大小。
对于数据库来说,它不会每次有一个数据页变化后,就存到硬盘。而是变化达到一定数量级后才会作这个操作。这时候,数据库并不是以数据页来作为操作单元,而是以64k的数据(8个数据页,一个区)作为操作单元。
区是管理空间的基本单位。一个区是八个物理上连续的页(即64kb)。这意味着sqlserver数据库中每mb有16个区。
为了使空间分配更有效,sqlserver不会将所有区分配给包含少量数据的表。sqlserver有两种类型的区:
统一区,由单个对象所有。区中的所有8页只能由所属对象使用。
混合区,最多可由八个对象共享。区中八页的每页可由不同的对象所有。
通常从混合区向新表或索引分配页。当表或索引增长到8页时,将变成使用统一区进行后续分配。如果对现有表创建索引,并且该表包含的行足以在索引中生成8页,则对该索引的所有分配都使用统一区进行。
为何会这样呢?
其实很简单:
读或写8kb的时间与读或写64kb的时间几乎相同。
在8kb到64kb范围之内,单个磁盘i/o传输操作所花的时间主要是磁盘取数臂和读/写磁头运动的时间。
因此,从数学上来讲,当需要传输64kb以上的sql数据时,
尽可能地执行64kb磁盘传输是有益的,即分成数个64k的操作。
因为64kb传输基本上与8kb传输一样快,而每次传输的sqlserver数据是8kb传输的8倍。
我们通过一个实例来看有and操作符时候的最常见的一种情况。我们有下面一个表,
createtable[dbo].[member]notnull,[lastname][dbo].[shortstring]notnull,[firstname][dbo].[shortstring]notnull,[middleinitial][dbo].[letter]null,[street][dbo].[shortstring]notnull,[city][dbo].[shortstring]notnull,[state_prov][dbo].[statecode]notnull,[country][dbo].[countrycode]notnull,[mail_code][dbo].[mailcode]notnull,[phone_no][dbo].[phonenumber]null,[photograph][image]null,[issue_dt][datetime]notnulldefault),[expr_dt][datetime]notnulldefault)),[region_no][dbo].[numeric_id]notnull,[corp_no][dbo].[numeric_id]null,[prev_balance][money]nulldefault,[curr_balance][money]nulldefault,[member_code][dbo].[status_code]notnulldefault)
这个表具备下面的四个索引:
索引名细节索引的列
member_corpor