sql server中xml列的性能

sql server中xml列的性能,sql,sql-server,xquery,xmltype,Sql,Sql Server,Xquery,Xmltype,我已经规范化了表,这些表以以下格式保存数据 第一个表名日志 列包括JourneyID、LocationID、PositionID、ID、 第二个表LogBookEvents 列为LogBookID、LifeCodeID、LifeCode、LifeCodeValue和TotalValue 第一个表有340万条记录 第二个表有1730万条记录 我发现这些表上的性能非常高,即使我在表上有所有必要的索引 因此,我设计了一个具有XML格式的新表 新桌子是。。航海日志, 列为JourneyID、LifeCo

我已经规范化了表,这些表以以下格式保存数据

第一个表名日志 列包括JourneyID、LocationID、PositionID、ID、

第二个表LogBookEvents 列为LogBookID、LifeCodeID、LifeCode、LifeCodeValue和TotalValue

第一个表有340万条记录 第二个表有1730万条记录

我发现这些表上的性能非常高,即使我在表上有所有必要的索引

因此,我设计了一个具有XML格式的新表

新桌子是。。航海日志, 列为JourneyID、LifeCode(XML类型)

通过这样做,我将记录的数量减少到90万条

而生命码保存的数据格式如下

<LogBookLifeCodeEvents><LifeCodes>
<LogBookID>11</LogBookID>
<LocationID>0</LocationID>
<PositionID>0</PositionID>
<LifeCodeID>4</LifeCodeID>
<LifeCode>FH</LifeCode>
<LifeValue>0.0000</LifeValue>
<LifeTotal>0.0000</LifeTotal>
但是,运行此查询需要4分钟才能获取LogBookID=11的值,这是不可接受的,返回130000条记录

但是如果我查询上述规范化的表只需要01秒,那么相同数量的记录

第二个表上的XML列具有索引(主索引和次索引)

当我检查执行计划时,标准化表索引(集群)的成本为73%

但是在XML列索引上只花费45%

只是想知道,使用XML列比使用关系表更好吗?或者还有其他方法可以提高XML列的性能,因为第二个表与第一个结构相比记录更少

感谢您的赞扬和建议

非常感谢

引用本文(),请注意以下三个提示

  • 通过使用持久化列升级到关系列
  • 输入数据
  • 为XML建立索引
  • 您可能正在为XML编制索引,但是(对我来说)为XML编制索引比根据查询计划为关系数据编制索引更加困难。本文的要点是,如果您真的非常努力地工作,您可能能够接近XML数据的关系级性能,而不是超过它

    我理解为什么您可以从概念上采用这种方式,但SQLServer是一个关系数据库。您几乎总能从适当管理的关系对象中获得最佳性能

    您注意到,“我发现这些表上的性能非常高,即使我在表上有了所有必要的索引”,但后来指出,note的关系查询只需1秒,而基于XML的查询只需4分钟

    根据提供的信息,我不理解您试图解决的问题,但您不应该期望XML数据的性能比SQL Server中的关系数据更好

    Select Tbl.Col.value('LogBookID[1]', 'int'),  
       Tbl.Col.value('LocationID[1]', 'int'),  
       Tbl.Col.value('LocationPositionID[1]', 'int'),
       Tbl.Col.value('LifeCodeID[1]', 'int'),
       Tbl.Col.value('LifeCode[1]', 'varchar(20)') from LogbookLifeCodes outer apply LogbookLifeCodes.LifeCode.nodes('//LogBookLifeCodeEvents/LifeCodes') Tbl(Col) where Tbl.Col.value('LogBookID[1]', 'int') = 11