XML数据库与SQL Server数据库

时间:2010-09-15 05:41:41

标签: c# sql-server xml database performance

我有一个使用Sql server 2005作为后端的现有应用程序。它包含巨大的记录,我需要连接包含50000-70000的表。在客户端机器中它减速。

那么,我可以通过使用XML作为后端来提高其性能吗?我已经检查过,当我加载数据时,xml文件的大小变为35MB到50MB。我还需要在xml文件上搜索操作。 所以,哪一个更适合表现。

6 个答案:

答案 0 :(得分:8)

  

我可以使用XML作为后端来提高性能吗?

绝对是不是! - Xml ,请改用SQL Server。

Xml最初的设计考虑了互操作性,而不是性能。因此,xml格式的冗长和动态特性使得它的读取成本相对较高,并且几乎不可能进行索引。 绝对没有理由相信在任何情况中使用Xml 解决性能问题。

不要误会我的意思 - 我认为Xml很坦率,但它肯定不会很快。另一方面,SQL Server在设计时考虑了性能和可扩展性。

我在另一个answer上写了一个类似的问题,你可能会发现它与之相关。

答案 1 :(得分:6)

对于这种大小,SQL Server绝对是更好的选择。

如果您的SQL数据库运行速度非常慢,则表示您尚未创建必要的索引。您需要创建索引,以便SQL引擎可以更加轻松有效地按特定值查找行。例如,如果您有一个客户表,并且您经常希望按名称查找客户,那么您应该为“名称”列编制索引。由于您说您加入了大型表,因此您应该为您加入的列编制索引。

50,000条记录实际上不是那么多。我最后一次维护一个在SQL Server上运行的数据库时,它有数百万行的表(合理地说是这样;数据不是多余的或者是多余的),并且在非常复杂的查询中加入这些表是绝对没问题的。

答案 2 :(得分:2)

不要使用XML数据库.....,这很危险!

当更多IO访问xml,更新或追加新元素时,它将丢失数据!

当更新xml文件,然后关机,数据将丢失,并使xml文件变为乱码

答案 3 :(得分:2)

XML不是数据库。 XML是一种数据交换格式,将其用作数据库通常是一种滥用行为。

XML文件不能轻易更新,也不会(通常)编入索引,因此您无法对数据库执行任何有用的操作(这些只是您不应将XML滥用为数据库的两个原因)

因此,无论如何都要将XML用于小型配置文件等(这些文件非常适合内存并且可以通过load-modify-save进行操作),但不要将其用作数据库,即使是小数据也是如此。

答案 4 :(得分:0)

哪一个更适合性能取决于您如何使用它们。显然加入70K行对性能不利。但是,您可以使用XML做同样糟糕的事情。考虑如何使用数据并进行一些合理的优化。在SQL Server中,可能有一些方法可以对数据进行非规范化,它可以解决您的问题,但是没有架构和一些代码,没有人可以肯定地说。

答案 5 :(得分:-1)

Joel Spolsky在Back to Basics中解决了这个问题。

  

上周我写道你不能   实现SQL语句SELECT   作者从你的数据快速的书籍   存储在XML中。以防万一   每个人都不明白我是什么   谈论,现在我们已经   整天在CPU中滚动,   这个断言可能更有意义。

     

关系数据库如何?   实施SELECT作者FROM books?在   关系数据库,a中的每一行   表(例如书籍表)是   完全相同的字节长度,和   每个领域都是固定的   从行的开头偏移。   所以,例如,如果每个记录在   书籍表长100个字节,而且   作者字段在偏移23处,然后   作者存储在第23字节,   123,223,323等。代码是什么   移动到下一个记录   这个查询的结果?基本上,它是   这样:

pointer += 100;
     

一条CPU指令。 Faaaaaaaaaast。

     

现在让我们看看书中的书   XML。

<?xml blah blah>
<books>
     <book>
          <title>UI Design for Programmers</title>
          <author>Joel Spolsky</author>
     </book>
     <book>
          <title>The Chop Suey Club</title>
          <author>Bruce Weber</author>
     </book>
</books>
     

快速提问。代码是什么?   转到下一个记录?

     

嗯...