关于SQL2005的XML字段 100superhasty]

发布时间:2017-1-17 8:45:07 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"关于SQL2005的XML字段 100superhasty]",主要涉及到关于SQL2005的XML字段 100superhasty]方面的内容,对于关于SQL2005的XML字段 100superhasty]感兴趣的同学可以参考一下。

今天发现一个奇怪的现象: SQL2005中的XML字段,不建立xml Schema和Xml Index时,查询效率非常高。建立后,效率非常低。 为什么会这样呢?我理解的,有了Schema和索引,至少查询效率应该会高一些的。否则为什么要建立Schema和xml Index呢--除了确保数据正确外,就没有好处了?

Schema 用来验证xml的有效性 index可以提高查询速度 这个不会有错,至于你觉得查询速度变慢,可能还有其他不得知的原因吧

把你的测试数据和表结构拿出来测测, 怎么会有这么奇怪的事

--Step1 :创建数据Schema CREATE XML SCHEMA COLLECTION PermissionSchema AS '<?xml version="1.0" standalone="yes"?> <xs:schema id="Permission" xmlns="http://www.gocean.com.cn" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">   <xs:element name="Permission" msdata:IsDataSet="true" msdata:Locale="zh-CN">     <xs:complexType>       <xs:choice minOccurs="1" maxOccurs="unbounded">             <xs:sequence>               <xs:element name="Sec1" type="xs:int" minOccurs="1" />               <xs:element name="Sec2" type="xs:int" minOccurs="1" />               <xs:element name="Sec3" type="xs:int" minOccurs="1" />       <xs:element name="Sec4" type="xs:int" minOccurs="1" />               <xs:element name="Sec5" type="xs:int" minOccurs="1" />               <xs:element name="Sec6" type="xs:int" minOccurs="1" />       <xs:element name="Sec7" type="xs:int" minOccurs="1" />               <xs:element name="Sec8" type="xs:int" minOccurs="1" />               <xs:element name="Sec9" type="xs:int" minOccurs="1" />       <xs:element name="Sec10" type="xs:int" minOccurs="1" />             </xs:sequence>       </xs:choice>     </xs:complexType>   </xs:element> </xs:schema>' select * from sys.xml_schema_collections --Step 2:创建表定义 CREATE TABLE Permission (ID int IDENTITY(1,1),  PXml xml(PermissionSchema),  PInt int) ALTER TABLE [Permission] ADD  CONSTRAINT [PK_Permission] PRIMARY KEY  CLUSTERED  ( [ID] )  ON [PRIMARY]  --创建插入数据的存储过程 CREATE PROCEDURE SaveXML(@XML xml,@Int int) AS insert Permission(PXml,PInt) values(@XML,@Int)

--创建主XML索引 create primary xml index xidx_Permission on Permission(PXml) create xml index xidx_Permission_path on Permission(PXml) using xml index xidx_Permission for path create xml index xidx_Permission_property on Permission(PXml) using xml index xidx_Permission for property create xml index xidx_Permission_value on Permission(PXml) using xml index xidx_Permission for value --Step 3:插入10万条数据 set nocount on Declare @times int,@i int set @times=100000 set @i=1 Declare @max int set @max=1024 declare @pxml varchar(1000),@int int while @i<@times Begin Select @int=convert(int,Rand()[email protected]) select @pxml='<Permission><Sec1>' +convert(varchar(1),@int & power(2,0))+'</Sec1><Sec2>' +convert(varchar(1),@int & power(2,1))+'</Sec2><Sec3>' +convert(varchar(1),@int & power(2,2))+'</Sec3><Sec4>' +convert(varchar(1),@int & power(2,3))+'</Sec4><Sec5>' +convert(varchar(2),@int & power(2,4))+'</Sec5><Sec6>' +convert(varchar(2),@int & power(2,5))+'</Sec6><Sec7>' +convert(varchar(2),@int & power(2,6))+'</Sec7><Sec8>' +convert(varchar(3),@int & power(2,7))+'</Sec8><Sec9>' +convert(varchar(3),@int & power(2,8))+'</Sec9><Sec10>' +convert(varchar(3),@int & power(2,9))+'</Sec10></Permission>' --Select @pxml,@int Exec SaveXML @pxml,@int Set @[email protected]+1 End set nocount off

--测试:分两种情况,分别获取整数中的一个bit位,和xml中的一个节点的值。比较二者所用时间。 --奇怪的结果:不使用xml schema,尤其是不使用xml index时,性能最好。 select getdate() set nocount on Declare @times int,@i int,@int int set @times=10000 set @i=1 declare @id int,@rl int While @i<@times begin Select @int=convert(int,Rand()*100000) Select @id=ID --,PXml.query('/Permission/Sec1[/Permission/Sec1>0]') ,@rl=PXml.value('(/Permission/Sec3)[1]','int') --测试1:获取xml中的某一个节点的值 (注释掉测试2,执行这里) --,@rl=(pint & power(2,3))        --测试2:获取整数中的某一bit的值(注释掉测试1,执行这里) From  permission  with(nolock) Where [email protected] select @[email protected]+1 end set nocount off select @i,@id,@rl,@int select getdate()

似乎给出的Schema有点问题,有没有完整的Schema,我看看能不能重现这个问题。

上一篇:sqlserver2005请教简单问题 80CSDN]
下一篇:哪有 Microsoft SQL Server 2005 Enterprise Edition 下载?BT也可 20CSDN]

相关文章

相关评论