数据库实验心得-总结报告模板.pdf

数据库实验心得-总结报告模板.pdf

ID:57565046

大小:243.73 KB

页数:7页

时间:2020-08-27

数据库实验心得-总结报告模板.pdf_第1页
数据库实验心得-总结报告模板.pdf_第2页
数据库实验心得-总结报告模板.pdf_第3页
数据库实验心得-总结报告模板.pdf_第4页
数据库实验心得-总结报告模板.pdf_第5页
资源描述:

《数据库实验心得-总结报告模板.pdf》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、数据库实验心得我在sqlserver索引基础知识系列中,第一篇就讲了记录数据的基本格式。那里主要讲解的是,数据库的最小读存单元:数据页。一个数据页是8k大小。对于数据库来说,它不会每次有一个数据页变化后,就存到硬盘。而是变化达到一定数量级后才会作这个操作。这时候,数据库并不是以数据页来作为操作单元,而是以64k的数据(8个数据页,一个区)作为操作单元。区是管理空间的基本单位。一个区是八个物理上连续的页(即64kb)。这意味着sqlserver数据库中每mb有16个区。为了使空间分配更有效,sqlserver不会将所有区分配给包含少量数据的表。sqlserver有两种类型的区:统一区,由

2、单个对象所有。区中的所有8页只能由所属对象使用。混合区,最多可由八个对象共享。区中八页的每页可由不同的对象所有。通常从混合区向新表或索引分配页。当表或索引增长到8页时,将变成使用统一区进行后续分配。如果对现有表创建索引,并且该表包含的行足以在索引中生成8页,则对该索引的所有分配都使用统一区进行。为何会这样呢?其实很简单:读或写8kb的时间与读或写64kb的时间几乎相同。在8kb到64kb范围之内,单个磁盘i/o传输操作所花的时间主要是磁盘取数臂和读/写磁头运动的时间。因此,从数学上来讲,当需要传输64kb以上的sql数据时,尽可能地执行64kb磁盘传输是有益的,即分成数个64k的操作。

3、因为64kb传输基本上与8kb传输一样快,而每次传输的sqlserver数据是8kb传输的8倍。我们通过一个实例来看有and操作符时候的最常见的一种情况。我们有下面一个表,createtable[dbo].[member]([member_no][dbo].[numeric_id]identity(1,1)notnull,[lastname][dbo].[shortstring]notnull,[firstname][dbo].[shortstring]notnull,[middleinitial][dbo].[letter]null,[street][dbo].[shortstrin

4、g]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(getdate()),[expr_dt][datetime]notnulldefault(dateadd

5、(year,1,getdate())),[region_no][dbo].[numeric_id]notnull,[corp_no][dbo].[numeric_id]null,[prev_balance][money]nulldefault(0),[curr_balance][money]nulldefault(0),[member_code][dbo].[status_code]notnulldefault(‘‘))这个表具备下面的四个索引:索引名细节索引的列member_corporation_linknonclusteredlocatedonprimarycorp_nomemb

6、er_identclustered,unique,primarykeylocatedonprimarymember_nomember_region_linknonclusteredlocatedonprimaryregion_nomemberfirstnamenonclusteredlocatedonprimaryfirstname当我们执行下面的sql查询时候,select_no,,_nofromasmwherelike‘k%’and_no>6and_no6)b--这个查询可以直接使用member_region_link非聚集索引,而且这个非聚集索引覆盖了所有查询列--实际执行时,只

7、需要逻辑读取10次where_no=_no不信,你可以看这两个sql的执行计划,以及逻辑读信息,都是一样的。其实上面的sql,如果优化成下面的方式,实际的逻辑读消耗也是一样的。为何sqlserver不会优化成下面的方式。是因为and操作符优化的另外一个原则。1/26的数据和1/6的数据找交集的速度要比1/52的数据和1/3的数据找交集速度要慢。select_no,,_nofrom(select_no,fromasmwherelike‘k%’--

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。