设为首页 收藏本站
查看: 703|回复: 0

[经验分享] 《Microsoft Sql server 2008 Internals》读书笔记--第五章Table(3)

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-6-28 15:40:04 | 显示全部楼层 |阅读模式
  《Microsoft Sql server 2008 Internals》读书笔记订阅地址:
  http://www.iyunv.com/downmoon/category/230397.html/rss
  《Microsoft Sql server 2008 Internals》索引目录:
  《Microsoft Sql server 2008 Internal》读书笔记--目录索引
  在上一篇中,我们主要学习了如何在系统视图中察看我们创建表和索引的元数据信息,今天,我们继续学习数据存储的元数据结构。
数据存储元数据(Data Storage Metadata)
  还记得Haep吗?,就是没有聚集索引的表。每一个Heap和索引都在sys.indexes视图中有一行记录,SQL2008中每个表和索引能被 存储在多个分区中。sys.Partitions包含一个Row对应于每一个Heap或索引的分区。每一个Heap或索引至少有一(到1000)个分区, 即使你没有定义分区结构。因此,sys.indexes与sys.Partitions是一对多的关系,在SQL2008中用了一个词"hobt" (Heap Or B-Tree)来称谓表或索引在一个分区中的子集(subset),所以在sys.partitions中有一列是hobt_id。实际 上,hobt_id和partition_id是一一对应关系。这两列的值也完全一样。
  示例:

DSC0000.gif DSC0001.gif 代码

CREATE TABLE dbo.employee(
               emp_lname  varchar(15)   NOT NULL,
               emp_fname  varchar(10)   NOT NULL,
               address    varchar(30)   NOT NULL,
               phone      char(12)      NOT NULL,
               job_level  smallint      NOT NULL
);
go
alter table dbo.employee
add Emp_ID int    identity(1,1)
alter table dbo.employee
add constraint PK_Employee primary key (Emp_ID)
go
SELECT  object_id, name, index_id, type_desc
FROM sys.indexes
WHERE object_id=object_id('dbo.employee');
  结果:
  
每一个分区(无论是一个Heap或者索引)能存储三种类型的行,分别存储在自己特定的页面(pages)中。即in-row data pages(可以理解为规则数据)、row-overflow data pages和LOB data pages。针对于一个特定分区的一个特定的页面被称为allocation unit(分配单元),每个分区在视图sys.allocation_units中有多个行,因为每个分区我们多个分配单元。总有一个分配单元针对n- row data,也可能有分配单元针对LOB data和row-overflow data,下图展示了这种关系:

  查询目录视图 (Querying Catalog Views)
  其实前面已经多次应用,这里我们再练习一下sys.allocation_units

代码

SELECT object_name(object_id) AS name,  
    partition_id, partition_number AS pnum,  rows,  
    allocation_unit_id AS au_id, type_desc as page_type_desc,
    total_pages AS pages
FROM sys.partitions p JOIN sys.allocation_units a
   ON p.partition_id = a.container_id
WHERE object_id=object_id('dbo.employee');  结果如下:

  再增加不“规则列”


alter table dbo.Employee
add Desc_Long Nvarchar(4000) null,
Notes text null,
LongVar Nvarchar(max)
  结果:

  你也可发创建一个或两个索引来测试索引视图,应该注意到仅仅增加一个聚集索引并不会改变sys.allocation_units的行数,但却改变 了partition_id 数字,因为创建一个聚集索引的时候表完全被内部重建了 。你可以从以下语句的结果中看到这个差异:

代码

SELECT  convert(char(8),object_name(i.object_id)) AS table_name,
    i.name AS index_name, i.index_id, i.type_desc as index_type,
    partition_id, partition_number AS pnum,  rows,
    allocation_unit_id AS au_id, a.type_desc as page_type_desc,
    total_pages AS pages
FROM sys.indexes i JOIN sys.partitions p  
        ON i.object_id = p.object_id AND i.index_id = p.index_id
    JOIN sys.allocation_units a
        ON p.partition_id = a.container_id
WHERE i.object_id=object_id('dbo.employee');  大家可能注意到rows和Pages都是0,那是因为我们还没有插入任何数据。
  到目前为止,我们并没有查询关于page的分配信息情况。在SQL2000中sysindexes表包含了三列关于空间分配的信 息:first,root和firstIAM,
  在SQL2008中这三个列名改为first_page,root_page,和first_iam_page,但只在MSDN未 公开的sys.system_allocation_units中可以查到。 而公开的一个视图是sys.allocation_units。看来,微软还是藏了不少压箱货啊!呵呵。
  关于更多的目录视图的知识,请看MSDN:
  http://msdn.microsoft.com/zh-cn/library/ms174365%28SQL.90%29.aspx
  下一节将更深入学习数据页Data Pages
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-81233-1-1.html 上篇帖子: 《Microsoft Sql server 2008 Internals》读书笔记--第五章Table(4) 下篇帖子: 《Microsoft Sql server 2008 Internals》读书笔记--第五章Table(2)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表