《Microsoft Sql server 2008 Internals》读书笔记--第五章Table(3)

本文详细介绍了SQL Server 2008的数据存储元数据结构,包括Heap、索引和分区的概念,并通过具体示例展示了如何使用系统视图查询这些元数据信息。
《Microsoft Sql server 2008 Internals》索引目录:

《Microsoft Sql server 2008 Internals》读书笔记--目录索引


在上一篇中,我们主要学习了如何在系统视图中察看我们创建表和索引的元数据信息,今天,我们继续学习数据存储的元数据结构。
数据存储元数据(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是一一对应关系。这两列的值也完全一样。

示例:
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

邀月注:本文版权由邀月 和优快云共同所有,转载请注明出处。
助人等于自助! 3w@live.cn

内容概要:本文介绍了基于贝叶斯优化的CNN-LSTM混合神经网络在时间序列预测中的应用,并提供了完整的Matlab代码实现。该模型结合了卷积神经网络(CNN)在特征提取方面的优势与长短期记忆网络(LSTM)在处理时序依赖问题上的强大能力,形成一种高效的混合预测架构。通过贝叶斯优化算法自动调参,提升了模型的预测精度与泛化能力,适用于风电、光伏、负荷、交通流等多种复杂非线性系统的预测任务。文中还展示了模型训练流程、参数优化机制及实际预测效果分析,突出其在科研与工程应用中的实用性。; 适合人群:具备一定机器学习基基于贝叶斯优化CNN-LSTM混合神经网络预测(Matlab代码实现)础和Matlab编程经验的高校研究生、科研人员及从事预测建模的工程技术人员,尤其适合关注深度学习与智能优化算法结合应用的研究者。; 使用场景及目标:①解决各类时间序列预测问题,如能源出力预测、电力负荷预测、环境数据预测等;②学习如何将CNN-LSTM模型与贝叶斯优化相结合,提升模型性能;③掌握Matlab环境下深度学习模型搭建与超参数自动优化的技术路线。; 阅读建议:建议读者结合提供的Matlab代码进行实践操作,重点关注贝叶斯优化模块与混合神经网络结构的设计逻辑,通过调整数据集和参数加深对模型工作机制的理解,同时可将其框架迁移至其他预测场景中验证效果。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值