如果要编写一次数据并多次查询,那么解析XML文档一次,将数据存储在适当的关系模式中并查询关系模式几乎肯定会更有效.解析XML并不便宜,因此每5分钟解析一次可能的多个XML文档的开销可能很大.
当然,和所有性能问题一样,您的里程可能会有所不同,因此可能值得测试.如果您使用的是Oracle 11.2,并且您将数据存储为二进制XML(在这种情况下它将在解析后存储),并且您在存储的XMLTypes上创建了适当的XMLIndexes,则将数据保留在XML文档中的性能损失可能是相当小.它应该仍然比适当的关系结构慢,但差异可能对你没有意义.
就个人而言,我更喜欢关系存储方法,甚至忽略性能问题,因为它使其他人更容易与数据交互.有更多的开发人员可以编写体面的SQL而不是编写体面的XPath表达式,并且有更多的查询工具可以从关系表生成报告,而不是从存储在数据库中的XML生成报告.
Maximus,这实际上取决于您想要对XML数据做什么.
当我使用XML进行控制时,例如配置页面的显示方式,我将整个XML存储在一个BLOB字段中.它快速而且非常简单.这是一个简单的保存和加载例程.您可以在BLOB字段中轻松查看XML并进行编辑.
如果您需要搜索或报告XML内部的值,例如有多少客户具有特定属性,您可能希望解析为单个属性.这通常意味着您必须进行一些预处理和后处理,但允许您快速获取单个属性.