1 / 13
文档名称:

sql数据库实训总结.doc

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

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

分享

预览

sql数据库实训总结.doc

上传人:小博士 2018/11/15 文件大小:65 KB

下载得到文件列表

sql数据库实训总结.doc

文档介绍

文档介绍:sql数据库实训总结
sql数据库实训总结,SQL是Structured Query Language(结构化查询语言)的缩写。SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言。下面是分享的sql数据库实训总结,欢迎阅读!
sql数据库实训总结
我在sql server索引基础知识系列中,第一篇就讲了记录数据的基本格式。
那里主要讲解的是,数据库的最小读存单元:数据页。
一个数据页是8k大小。
对于数据库来说,它不会每次有一个数据页变化后,就存到硬盘。
而是变化迖到一定数量级后才会作这个操作。
这时候,数据库并不是以数据页来作为操作单元,而是以64k的数据(8个数据页,一个区)作为操作单元。
区是管理空间的基本单位。
一个区是八个物理上连续的页(即64 kb)。
这意味着sql server数据库中每mb有16个区。
为了使空间分配更有效,sql server不会将所有区分配给包含少量数据的表。
sqlserver有两种类型的区: 统一区,由单个对象所有。
区中的所有8页只能由所属对象使用。
混合区,最多可由八个对象共享。
区中八页的每页可由不同的对象所有。
通常从混合区向新表或索引分配页。
当表或索引增长到8页时,将变成使用统一区进行后续分配。
如果对现有表创建索引,并且该表包含的行足以在索引中生成8页,则对该索引的所有分配都使用统一区进行。
为何会这样呢?
其实很简单:
读或写8kb的时间与读或写64 kb的时间几乎相同。在8 kb到64 kb范围之内,单个磁盘i/o传输操作所花的时间主要是磁盘取数臂和读/写磁头运动的时间。
此,从数学上来讲,当需要传输64 kb以上的sql数
据时,
尽可能地执行64 kb磁盘传输是有益的,即分成数个 64k的操作
为64 kb传输基本上与8 kb传输一样快,而每次传输的sql server数据是8 kb传输的8倍。
我们通过一个实例来看有and操作符时候的最常见的一种情况。
我们有下面一个表,
create table . ( . identity(1,1) not null, . not
null, . not null, . null, . not null, . not null, not null, . not null, . not null, . null, null, not null default (getdateO), not null default (dateadd(year,1,getdate())), . not null, . null,
null default (0), null default (0), . not null
default (‘ ‘))
这个表具备下面的四个索引索引名细节索引的列
member_corporation_link nonclustered located on primary corp_no
member_ident clustered, unique, primary key located on primary member_no
member_region_link nonclustered located on primary region_no
meraberfirstname nonclustered located on primary firstname
当我们执行下面的sql查询时候,
select m. member_no, m. firstname, m. region_nofrom dbo. member as mwhere m. firstname like ‘kV and
m. region一no > 6 and m. member_no select a. member_no,a. firstname,b. region_nofrom(select m. member_no, m. firstname from dbo. member as m where
m. firstname like ‘k%’ and m. member—no (select
m. member_no, m. region_no from dbo. member as mwhere m. region_no > 6) b
--这个查询可以直接使用member_region_link非聚集索引,而且这个非聚集索引覆盖了所有查询列一实际执行时,只需要逻辑读取10次
where a. member no = b. member no
不信,你可以看这两个sql的执行计划,以及逻辑读信息,都是一样的。
其实上面的sq