ms sql serverxml 最佳实践数据库技巧Word文件下载.docx
- 文档编号:20674773
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:24
- 大小:38.50KB
ms sql serverxml 最佳实践数据库技巧Word文件下载.docx
《ms sql serverxml 最佳实践数据库技巧Word文件下载.docx》由会员分享,可在线阅读,更多相关《ms sql serverxml 最佳实践数据库技巧Word文件下载.docx(24页珍藏版)》请在冰豆网上搜索。
您的数据为稀疏数据,或您不了解数据的结构,或数据结构将来可能会有重大变化。
您的数据体现的是包容层次结构而不是在实体间的引用,并且可能是递归数据。
您的数据本身具有顺序性。
您希望基于数据的结构查询数据或更新部分数据。
如果上述条件均不满足,则应使用关系数据模型。
例如,如果数据为XML格式,但应用程序只是使用数据库来存储和检索数据,则只需要[n]varchar(max)列。
将数据存储在XML列中还有其他好处,包括让引擎确定数据格式是否正确或有效,以及支持对XML数据进行精细查询和更新。
在SQLServer2005中存储XML数据的理由
下面是一些使用SQLServer2005中的本机XML功能而不是在文件系统中管理XML数据的理由:
您希望以一种高效的事务处理方式来共享、查询和修改XML数据。
精细的数据访问对于您的应用程序而言很重要。
例如,您可能需要提取XML文档中的某些部分,或者您可能需要插入新的部分而不是替换整个文档。
您有关系数据和XML数据,希望在应用程序中进行关系数据和XML数据之间的互操作。
您需要语言支持,以便对于跨域应用程序可以进行查询和数据修改。
您希望服务器能够保证数据格式正确,并能够视情况根据XML架构来验证您的数据。
您希望对XML数据创建索引以实现高效的查询处理和良好的可伸缩性,并使用一流查询优化器。
您希望对XML数据进行SOAP、ADO.NET和OLEDB访问。
您希望使用数据库服务器的管理功能来管理XML数据。
例如,这可能是备份、恢复和复制。
如果上述条件均不满足,最好将数据存储为非XML大型对象类型,如[n]varchar(max)或varbinary(max)。
XML存储选项
SQLServer2005中的XML存储选项包括:
采用xml数据类型的本机存储
数据以保留数据的XML内容的内部表示形式进行存储,XML内容包括包容层次结构、文档顺序、元素和属性值等。
具体来说,就是保留XML数据的InfoSet内容。
有关InfoSet的详细信息,请访问http:
//www.w3.org/TR/xml-infoset。
InfoSet内容并不是文本XML的精确副本,因为其中未保留下列信息:
无关紧要的空格、属性顺序、命名空间前缀和XML声明。
对于类型化的xml数据类型(即绑定到XML架构的xml数据类型),后架构验证InfoSet(PSVI)将类型信息添加到InfoSet,并以内部表示形式进行编码。
这会显著提高分析速度。
有关详细信息,请参阅http:
//www.w3.org/TR/xmlschema-1和http:
//www.w3.org/TR/xmlschema-2上的W3CXML架构规范。
在XML和关系存储之间映射
通过使用带批注的架构(AXSD),将XML分解到一个或多个表中的列。
这可保留在关系级别上的数据保真度。
因此,尽管忽略了元素间的顺序,但仍保留了层次结构。
架构不能是递归的。
大型对象存储[n]varchar(max)和varbinary(max)
存储数据的精确副本。
这对于特殊用途的应用(如法律文档)很有用。
大多数应用不需要完全相同的副本,且XML内容(InfoSet保真度)即可满足需要。
通常,您必须结合使用这些方法。
例如,您可能需要将XML数据存储在xml数据类型列中,并将其中的属性提升到关系列中。
或者,您可能需要使用映射技术将非递归部分存储到非XML列中,而只将递归部分存储在xml数据类型列中。
XML技术的选择
XML技术(本机XML与XML视图)的选择通常取决于下列因素:
存储选项
您的XML数据可能更适于大型对象存储(例如,产品手册),或更适于存储在关系列中(例如,转换为XML的行项)。
每个存储选项都在不同程度上保留文档保真度。
查询功能
您可能会发现,基于查询的特性和对XML数据进行查询的程度,某一个存储选项比其他选项更合适。
在两个存储选项中,对XML数据的精细查询(例如,XML节点上的谓词评估)得到不同程度的支持。
对XML数据创建索引
您可能希望对XML数据创建索引以提高XML查询的性能。
索引选项随存储选项的不同而不同,您必须做出适当的选择才能优化工作负荷。
数据修改功能
某些工作负荷涉及对XML数据进行精细修改。
例如,在文档中添加新的部分,而其他工作负荷(如Web内容)则不涉及。
对于您的应用程序来说,数据修改语言支持可能很重要。
架构支持
您的XML数据可通过架构进行说明,该架构可能是XML架构文档,也可能不是。
对架构绑定的XML的支持取决于XML技术。
此外,不同的选择具有不同的性能特征。
本机XML存储
您可以将XML数据存储在服务器上的XML数据类型列中。
下列情况下,适于做此选择:
您希望使用一种简单的方法将XML数据存储在服务器上,同时保留文档顺序和文档结构。
您可能有对应于您的XML数据的架构,也可能没有。
您希望查询和修改XML数据。
您希望对XML数据创建索引,以提高查询处理的速度。
您的应用程序需要系统目录视图以管理您的XML数据和XML架构。
如果您的XML文档具有多种结构,或您的XML文档符合不同的或复杂的架构,而这些架构很难映射到关系结构,本机XML存储很有用。
示例:
使用xml数据类型对XML数据进行建模
例如有一个XML格式的产品手册,其中每个主题对应单独的一章,而每章中又包含多节。
一节可以包含多个小节。
因此,<
section>
是一个递归元素。
产品手册包含大量混合内容、关系图和技术材料;
数据是半结构化的。
用户可能希望对感兴趣的主题执行上下文搜索,例如,在有关“索引”的章中搜索有关“聚集索引”的节,并查询技术数量。
适于您的XML文档的存储模型是xml数据类型列。
这可保留XML数据的InfoSet内容。
对XML列创建索引有利于提高查询性能。
保留XML数据的精确副本
为了进行说明,假定政府条例要求您保留XML文档的精确文本副本。
例如,这些文档可能为签署的文档、法律文档或股票交易单。
您可能希望将文档存储在[n]varchar(max)列中。
查询时,先在运行时将数据转换为xml数据类型,然后对其执行Xquery。
运行时转换开销可能很高,尤其是在文档较大的情况下。
如果经常查询,可以采取冗余方式将文档存储在xml数据类型列中,并对其创建索引,同时从[n]varchar(max)列中返回精确的文档副本。
XML列可以是基于[n]varchar(max)列的计算列。
但不能对XML计算列创建XML索引,也不能对[n]varchar(max)或varbinary(max)列创建XML索引。
XML视图技术
通过定义XML架构和数据库中的表之间的映射,可以创建持久性数据的“XML视图”。
通过XML视图,可使用XML大容量加载来填充基础表。
您可以使用XPath1.0版来查询XML视图;
这种查询将被转换为针对表的SQL查询。
与此类似,更新也会被传播到那些表。
在下列情况下,此技术很有用:
您希望拥有以XML为中心的编程模型,该模型使用现有关系数据上的XML视图。
您有对应于您的XML数据的架构(XSD、XDR),该架构可能由外部伙伴提供。
数据中的顺序并不重要,或查询表数据不是递归的,或事先已知最大递归深度。
您希望使用XPath1.0版通过XML视图查询和修改数据。
您希望通过XML视图来大容量加载XML数据,并将其分解到基础表。
相关示例包括显示为用于数据交换和Web服务的XML的关系数据。
有关详细信息,请参阅MSDNOnlineLibrary。
使用带批注的XML架构(AXSD)对数据进行建模
为了进行说明,假定您具有希望将其作为XML处理的关系数据(如客户、订单和行项)。
请使用AXSD在关系数据上定义XML视图。
通过使用XML视图可以将XML数据大容量加载到表,以及使用XML视图查询和更新关系数据。
如果必须在SQL应用程序不间断工作时与其他应用程序交换包含XML标记的数据,该模型很有用。
混合模型
通常,对于数据建模,适于结合使用关系列和xml数据类型列。
可以将XML数据中的某些值存储在关系列中,而将其余或全部XML值存储在XML列中。
这可获得更好的性能,您可以更好地控制对关系列创建的索引和锁定特征。
要存储在关系列中的值取决于您的工作负荷。
例如,如果基于路径表达式/Customer/@CustId检索所有XML值,则将CustId属性的值提升到关系列并对其创建索引可以获得更快的查询性能。
另一方面,如果您的XML数据是以非冗余方式广泛地分解为关系列中,则重新汇集的开销可能很大。
对于高度结构化的XML数据,例如,表的内容已转换为XML,您可以将所有值映射到关系列,并且可能使用XML视图技术。
使用xml数据类型进行数据建模
本部分讨论有关本机XML存储的数据建模主题,包括对XML数据创建索引、属性提升和类型化的xml数据类型。
相同或不同的表
可以在包含其他关系列的表中,或在与主表具有外键关系的单独表中创建xml数据类型列。
如果满足下列条件之一,请在同一个表中创建xml数据类型列:
您的应用程序对XML列执行数据检索,并且不需要XML列的XML索引。
您希望对xml数据类型列生成XML索引,并且主表的主键与其聚集键相同。
有关详细信息,请参阅“对xml数据类型列创建索引”。
如果满足下列条件,请在单独的表中创建xml数据类型列:
您希望对xml数据类型列生成XML索引,但主表的主键与其聚集键不同,或主表没有主键,或主表是一个堆(即没有聚集键)。
如果主表已存在,可能会这样。
您不希望因为表中存在XML列而降低表扫描的速度。
无论该列是存储在行内还是行外,都会占用空间。
XML数据的粒度
XML列中存储的XML数据的粒度对锁定至关重要,在一定程度上,对更新也很重要。
SQLServer对XML数据和非XML数据都使用相同的锁定机制。
因此,行级锁定会导致锁定行中的所有XML实例。
当粒度较大时,锁定大型XML实例以便进行更新会导致多用户情况下的吞吐量下降。
另一方面,过度分解会丢失对象封装,并增加重新汇集开销。
对于良好的设计而言,重要的是保持数据建模要求与锁定和更新特征之间的平衡。
但在SQLServer2005中,实际存储的XML实例的大小并不十分重要。
例如,通过使用对部分二进制大型对象(BLOB)和部分索引更新(将存储的现有XML实例与其更新后的版本进行比较)的新支持,对XML实例进行更新。
部分二进制大型对象(BLOB)更新在两个XML实例之间执行差异比较,并只更新差异之处。
部分索引更新只修改那些必须在XML索引中更改的行。
非类型化、类型化和约束的xml数据类型
SQLServer2005xml数据类型实现了ISOSQL-2003标准xml数据类型。
因此,它可以在非类型化的XML列中存储格式正确的XML1.0版的文档、具有文本节点和任意数量顶级元素的所谓的XML内容片段。
系统将检查数据格式是否正确,但不要求将列绑定到XML架构,并且拒绝在扩展意义上格式不正确的数据。
对于非类型化的XML变量和参数也是如此。
如果您有说明XML数据的XML架构,则可以将架构与XML列相关联以产生类型化的XML。
XML架构用于验证数据,在编译查询和数据修改语句过程中执行比非类型化的XML更精确的类型检查,以及优化存储和查询处理。
在下列情况下,请使用非类型化的xml数据类型:
您没有对应于您的XML数据的架构。
您有架构,但不希望服务器验证数据。
当应用程序在将数据存储到服务器之前执行客户端验证时,或临时存储根据架构确定无效的XML数据时,或在服务器上使用不受支持的架构组件(如key/keyref)时,有时会出现这种情况。
在下列情况下,请使用类型化的xml数据类型:
您有对应于您的XML数据的架构,并且希望服务器根据XML架构验证XML数据。
您希望充分利用基于类型信息的存储和查询优化。
您希望在编译查询过程中更好地充分利用类型信息。
类型化的XML列、参数和变量可以存储XML文档或内容。
但是,必须使用标志指定在声明时是存储文档还是存储内容。
此外,必须提供XML架构集合。
如果每个XML实例都刚好有一个顶级元素,请指定DOCUMENT。
否则,请使用CONTENT。
查询编译器在编译查询过程中的类型检查中使用DOCUMENT标志以推断单一的顶级元素。
除了对XML列进行类型化之外,还可以对类型化或非类型化的xml数据类型列使用关系(列或行)约束。
在下列情况下,请使用约束:
无法在XML架构中表达业务规则。
例如,花店的交货地址必须在其营业地点周围50英里之内。
这可以编写为XML列的约束。
约束可能涉及xml数据类型方法。
您的约束涉及表中的其他XML列或非XML列。
例如,强制使XML实例中的客户ID(/Customer/@CustId)与CustomerID关系列中的值匹配。
文档类型定义(DTD)
可以使用XML架构来对xml数据类型列、变量和参数进行类型化,但不能使用DTD进行此项操作。
但是,内联DTD既可用于非类型化的XML,也可用于类型化的XML,以便提供默认值,并将实体引用替换为其扩展形式。
可以通过使用第三方工具将DTD转换为XML架构文档,然后将XML架构加载到数据库中。
对xml数据类型列创建索引
可以对xml数据类型列创建XML索引。
它将对列中XML实例的所有标记、值和路径进行索引,从而提高查询性能。
在下列情况下,您的应用程序可以从XML索引中获益:
对XML列进行查询在您的工作负荷中很常见。
必须考虑数据修改过程中的XML索引维护开销。
XML值相对较大,而检索的部分相对较小。
生成索引避免了在运行时分析所有数据,并且索引查找有利于进行高效的查询处理。
XML列的第一个索引是主XML索引。
使用它时,可以对XML列创建三种类型的辅助XML索引,以提供常见种类的查询的速度,如以下部分所述。
主XML索引
这将对XML列中XML实例的所有标记、值和路径进行索引。
基表(即包含XML列的表)的主键必须具有聚集索引。
主键用于将索引行与基表中的行相关联。
可从XML列中检索完整的XML实例,例如SELECT*。
查询使用主XML索引,并通过使用索引本身返回标量值或XML子树。
创建主XML索引
在大多数示例中,使用包含非类型化的XML列的表T(pkINTPRIMARYKEY,xColXML)。
可以采用简单的方式将这些示例扩展为类型化的XML。
有关如何使用类型化的XML的详细信息,请参阅xml数据类型。
为简化起见,针对XML数据实例说明了查询,如下所示:
复制代码
<
bookgenre="
security"
publicationdate="
2002"
ISBN="
0-7356-1588-2"
>
<
title>
WritingSecureCode<
/title>
author>
first-name>
Michael<
/first-name>
last-name>
Howard<
/last-name>
/author>
David<
LeBlanc<
price>
39.99<
/price>
/book>
以下语句对表T的XML列xCol创建XML索引(名为idx_xCol):
CREATEPRIMARYXMLINDEXidx_xColonT(xCol)
辅助XML索引
创建了主XML索引之后,您可能希望创建辅助XML索引来提高工作负荷中不同种类查询的速度。
三种类型的辅助XML索引(即PATH、PROPERTY和VALUE)分别用于优化基于路径的查询、自定义属性管理方案和基于值的查询。
PATH索引功能是按文档顺序对列中的所有XML实例生成各个XML节点的(path,value)对的B+树。
PROPERTY索引功能是创建各个XML实例中(PK,path,value)对的聚集B+树,其中PK是基表的主键。
最后,VALUE索引功能是按文档顺序对XML列中的所有XML实例创建每个节点的(value,path)对的B+树。
下面是创建一个或多个这些索引的一些准则:
如果工作负荷对XML列大量使用路径表达式,则PATH辅助XML索引可能会提高工作负荷的处理速度。
最常见的情况是在Transact-SQL的WHERE子句中对XML列使用exist()方法。
如果工作负荷通过使用路径表达式从单个XML实例中检索多个值,则在PROPERTY索引中聚集各个XML实例中的路径可能会很有用。
这种情况通常出现在属性包方案中,此时提取对象的属性并且已知其主键值。
如果工作负荷涉及查询XML实例中的值,但不知道包含那些值的元素名称或属性名称,则您可能希望创建VALUE索引。
这通常出现在descendant轴查找中,例如//author[last-name="
Howard"
],其中<
元素可以出现在层次结构的任何级别上。
这种情况也出现在通配符查询中,例如/book[@*="
novel"
],其中查询将查找具有某个值为“novel”的属性的<
book>
元素。
基于路径的查找
为了进行说明,假定以下查询在您的工作负荷中很常见:
SELECTpk,xColFROMTWHERExCol.exist(/book/@genre[.="
])=1
路径表达式/book/@genre和值“novel”对应于PATH索引的键字段。
因此,PATH类型的辅助XML索引对此工作负荷很有用:
CREATEXMLINDEXidx_xCol_PathonT(xCol)USINGXMLINDEXidx_xColFORPATH
示例:
提取对象的属性
例如,下面的查询从表T中的各行检索书的属性genre、title和ISBN:
SELECTxCol.value((/book/@genre)[1],varchar(50)),xCol.value((/book/title/text())[1],varchar(50)),xCol.value((/book/@ISBN)[1],varchar(50))FROMT
在这种情况下,属性索引很有用,其创建方式如下:
CREATEXMLINDEXidx_xCol_PropertyonT(xCol)USINGXMLINDEXidx_xColFORPROPERTY
基于值的查询
在下面的查询中,descendant-or-self(//)指定部分路径,以便基于ISBN值的查找从VALUE索引的使用中获益。
SELECTxColFROMTWHERExCol.exist(//book/@ISBN[.="
VALUE索引的创建方式如下:
CREATEXMLINDEXidx_xCol_ValueonT(xCol)USINGXMLINDEXidx_xColFORVALUE
对XML列的全文索引
您可以对XML列创建一个全文索引,该索引对XML值的内容进行索引,但忽略XML标记。
属性值不
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ms sql serverxml 最佳实践数据库技巧 最佳 实践 数据库 技巧