2013-03-19 67 views
3

我最近开始在使用TSQL的表列中使用XML,发现它比我的平均日常3rd-Normal-Form-associative-tables-Query-joining慢得多,从我进行的测试中获得了150万行,我的意思是它比使用TSQL慢8倍3rd-Normal-Form-associative-tables-Query-joining。好处在于,使用XML时,如果以特定的方式进行设置,它会阻止您设置额外的关联表(在我的测试中,我的关联表(对于许多=多个关系的连接表达到750万行)我用这是在尺寸存储的信息相同)150万行的XML表,不要介意我的咆哮,虽然,这只是2套表,我已经进行的测试。在TSQL中优化XML

问题

对于我来说,这很难解释,因为我只是一个初学者与SQL Server的中间体。在列中使用Untyped XML的最佳实践是什么,以及如何优化包含此XML的表以在最佳条件下执行速度,看我现在必须现在用SQL脚本处理XPath和XQuery(根据执行计划,这似乎是导致严重速度放慢的原因)?

+0

我不认为你可以直接比较存储在一列中的XML文档和存储在多列(或表)中的规范化数据:它们是存储相同数据的不同方法,更好取决于你如何使用数据库。如果性能是您最关心的问题,那么即使需要更多的开发时间来实施,使用标准化表格方法也可能会更好。在这种情况下,查看table rowcount并不是很有用:如果表的设计和索引合理,7.5m行数并不多。 – Pondlife 2013-03-19 20:19:22

+0

您会发现,规范化的方法比XML更快捷,但由于我的同事略微疏忽,他们计划将数据作为逗号分隔值存储在列中,要求客户端分割使用此信息。我们的结论是,开发时间对于这个操作来说变得至关重要,因为这张表已经重新设计了14次。速度在这里不是一个超级关键问题(我们的服务器是无所不能的),但是我们可以从这个查询中获得的每一点小小的性能都会为用户带来更好的客户端体验。感谢 – Eon 2013-03-20 11:00:21

+0

是否存在将数据存储为xml-value或xml-attribute的速度差异? <部分prop42 =“110V - 220V” />或 “110V - 220V” Reinhard 2014-09-04 10:51:53

回答

2

有几件事情可以做,以提高XML领域的表现

  • 添加一个主XML索引
  • 添加辅助指标
  • 使用XML模式
  • 创建一个计算字段从XML中提取数据

XML字段倾向于IO密集度略低但是CPU数量多ntensive。检查是否是一个问题

+0

我已签出今天你的一些做法,也发现之类的东西,宣布一个根节点(告诉TSQL即根节点是一个单身人士),我只实现了一些计划,只有很小的变化(比如AVERAGE上查询的0.8秒加速)。最后,这并不重要。无论如何,这张表的预期大小只有20万行而不是150万行,所以它没有生存或死亡的问题。再次感谢。 – Eon 2013-03-20 10:56:45