2012-02-22 32 views
-1

我在数据库中有一个字段是XML,因为它表示在C#/ VB.Net中使用的类。问题出在最初的操作之后,大多数但不是全部的操作都是在SQL Server中完成的。这意味着XML字段即时转换。更快地在SQL Server中创建XML - 转换为表格?

随着我们获得更多的字段和更多记录,此操作变得越来越慢。我认为减速是将所有这些字段转换为其他数据类型。

于是加快步伐我想几个途径:

有一组代表不同的部分XML数据的表。我只会使用插入/更新上的触发器来使这些表读取,这会拒绝任何更改。当它更新XML时,我的“主”表格中包含XML,会关闭触发器,用新值更新表格,然后重新打开触发器。

我们使用XML的唯一真正原因是因为它很容易将它转换为C#/ VB.Net中的类。但是我得到的结论是,我最终可能会编写一个例程,它将采取所有的零碎工作,并将其转换为类,并且还可以用另一种方式(类 - >表)将其转换为函数。

任何人都可以提供任何想法,以更好的方式来做到这一点?我并不想使用XML结构。我担心的是,如果我们有单独的表来加速SQL处理,并且有人更改了表中字段的值,我们必须确保XML已更新。或者不允许该人更新它。

TIA - Jeff。

+2

代表一个C#类本身不是一个使用XML而不是关系表的特别好理由。 – 2012-02-22 21:14:58

+0

如果您在sql中操作类表示形式,它不再是可靠的表示形式,因此完全浪费空间。停止搞乱,承认你“弄错了”,抛弃xml,让班级自己从表格数据中加载。 – 2012-02-22 21:24:59

回答

0

你正在保存的对象的目的是什么?如果除了国家坚持以外的任何其他事情,你不会对自己有任何好处,而且你也没有把问题分开。如果它们是状态的持久性,那么至少可以从属性和域中创建列(只要在重构时留下内部方法来设置值)就可以包含私有。

0

无视您正在做什么的智慧,您可能会考虑创建一个XML索引。这应该可以帮助你开始:http://msdn.microsoft.com/en-us/library/ms345121%28v=sql.90%29.aspx

基本的想法是,正确的索引可以“预先粉碎”你的XML并自动构建你正在考虑做'手动'的表的索引。不利的一面是,如果你存储了大量的XML,这可以真正提升你的存储需求。

+0

我想我必须将其转换为表。 – user1226859 2012-02-23 14:01:32

+0

我认为真正的问题是当我拉取记录时,必须'unxml'XML表。我们经常需要很多东西,所以我们花了很多时间调用一个视图来转换它。我假设我一直在失去的地方。 – user1226859 2012-02-24 14:37:20

+0

XML索引可以为您预先unxml XML列。我链接的文章解释得很好。如果您通过视图获取XML,您可能会超越SQL引擎并使事情变得更糟? – Andrew 2012-02-24 16:43:56