我有一个使用Sql server 2005作为后端的现有应用程序。它包含巨大的记录,我需要连接包含50000-70000的表。在客户端机器中它减速。
那么,我可以通过使用XML作为后端来提高其性能吗?我已经检查过,当我加载数据时,xml文件的大小变为35MB到50MB。我还需要在xml文件上搜索操作。 所以,哪一个更适合表现。
答案 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>
快速提问。代码是什么? 转到下一个记录?
嗯...