0

这个问题既是理论问题,也是实践问题。任何表明对优化查询有用的资源的结果将不胜感激。

有一个大型 SQL 数据库,其中存储了大量存储在 SQLXML 字段中的数据。直接查询 XML 不够快。

我看过一些关于优化 SQLXML 的 MSDN 文章(即http://msdn.microsoft.com/en-us/library/aa902661(SQL.80).aspx),我知道索引可搜索的 xml 字段会增加搜索速度。

任何人都可以推荐任何额外的资源来优化数据库,无论是在这种环境中还是在一般情况下,特别有用?一如既往,我感谢你们的帮助

4

3 回答 3

0

显示估计的执行计划。

还:

SET STATISTICS IO ON
SET STATISTICS TIME ON
于 2010-07-10T04:55:06.170 回答
0

虽然不能完全回答您的问题,但您可能需要考虑不同的搜索策略。SQL Server/Oracle 和 MySQL 都非常适合存储大量的关系数据,但是在大多数情况下,它们在搜索文本时并不是那么好(显然这取决于您正在搜索的内容和您的索引)。

我建议您花一些时间查看像Lucene这样的搜索引擎,因为它可能比 SQL 更适合您的需求?

于 2010-07-10T04:54:15.267 回答
0

这取决于您需要对 XML 做什么。我有一个类似的设置,其中表结构被制作为“通用”,并且任何特定于产品的内容都隐藏在 XML 字段中。

我们还注意到查询 XML 并不是特别快的困难方式......并且使用 XML 索引(SQL Server 也提供)导致我们的数据库大小从大约 1 GB 跃升至超过 10 GB......

我们现在从 XML 中选择元素是这样的:

  • 创建一个用户定义的函数,获取 XML 内容作为其参数
  • 从该 XML 参数中提取值
  • 使用该 UDF 在父表中定义计算的、持久的列

这样,我们可以从 XML 中提取某些键值(例如“ProductID”或“ProductName”),并将它们作为列存储在父表中。它是计算的,例如它总是最新的,并且由于它也是持久的,它与表数据一起存储,例如它不会不断地重新查询和重新计算。而且由于它与表数据一起保存,您甚至可以在其上放置索引。

这非常有效,但它只适用于您想要从 XML 中提取的孤立的、单值的东西的情况。对于这种情况,这是一个很好的解决方案,它确实将这些值的查询速度提高了几个数量级。

于 2010-07-10T06:50:59.077 回答