2010-09-24 79 views
1

今天的快速问题......什么是更高效的方法,并且它们在SQL Server操作之间的性能有很大的差异。从数据库中检索多个对象的有效方法

  1. 四个单独的选择查询(只是id获取他们)在一个单一的交易,或

  2. 选择数据库四个对象在一个查询中选择它(ofcourse更复杂,联接)。

我会告诉你,我宁愿喜欢第一个解决方案,但我需要知道它是否效率低得多(如果效率不高)。

感谢您的任何意见..

+0

你有没有想过使用ORM? – 2010-09-24 15:36:48

+0

我们可能需要查看更多详细信息,但通常,单个查询应该会导致读取操作的数量少于四个独立查询。 – 2010-09-24 15:39:12

+0

我使用bltoolkit作为我的ORM ...它非常轻量级,接近纯SQL ...这就是为什么我避免在我的问题 – 2010-09-24 15:43:04

回答

2

通常情况下,多个查询效率较低,因为有可能是一个网络往返和其他一些开销,每个。您可以做的最有效的方式是以最少数量的查询检索所需的数据。

另一方面,如果您使用批处理,则可以在一次数据库往返中执行多个查询,这可能与访问单个查询中的对象大致相同。

如果你只加载几个对象,那没什么关系。业务逻辑的可维护性(这很可能取决于您选择的解决方案)更重要。

联接和构建对象的复杂性可以通过ORM完成。你不必自己实现这样的事情。使用NHibernate,您可以使用复杂查询或通过id查找单个实例。而且 - 它还支持ADO.NET的批处理和其他一些重要的性能改进。

+0

好吧...和批次你的意思是交易或其不同的故事?另一件事......我应该关心的是,如果这些查询将会是所有甚至更少的10%...... – 2010-09-24 15:46:49

+0

它与交易无关。事务用于隔离并使几个操作成为原子。如果不理解事务,就无法编写可靠的数据库访问。批次是一次发送到数据库引擎的查询集合。像一个脚本。 – 2010-09-24 21:47:06

+0

如果它简化了你的代码,你应该不会太在意性能......除非你确定了一个显着的性能问题。如果它不会影响你的代码太多,去优化。 – 2010-09-24 21:51:49

1

你的问题在信息上有点薄...如果对象在同一个表中,他们应该可能在一个查询中被提取,特别是如果你已经知道他们的ID。

+0

这些是许多表格的对象...例如,我需要获取一些视图,不仅是usr,而且还有它的组和地址... – 2010-09-24 15:48:35

1

选项2会更快,因为它减少了网络“往返”。提交每个查询,然后等待服务器编译查询计划并执行该查询时,将为您提交的每个查询重复;如果你能从一个查询中获得你想要的信息,它通常会更快。但是,性能方面,如果您查询数百或数千个非常“广泛”的记录,它可能只会引人注目。

相关问题