2

我有一个方法可以将 where 子句传递给查询。然后此方法返回一个 DataSet。

什么是更快和更有效的?要传递 where 子句以便 SQL Server 发送回更少的数据(但必须做更多的工作)还是让 Web 服务器通过 LINQ 处理它?

编辑

这是假设 SQL Server 比 Web 服务器更强大(可能应该是这种情况)。

4

4 回答 4

6

您是否直接使用 ADO.Net 来执行数据访问?如果是这样,那么是的 - 在您的 SQL 中使用 WHERE 子句并限制发送回您的应用程序的数据量。

SQL Server 在这方面很有效,您可以设计索引来帮助它访问数据,并且您将更少的数据传输回您的客户端应用程序。

假设您在一个表中有 20,000 行,但您只对其中的 100 行感兴趣。当然,仅从源中获取 100 行并将它们发送回比您在 Web 应用程序中过滤的全部行要有效得多。

您已标记 linq-to-sql,如果是这种情况,那么在 LINQ 语句中使用 WHERE 子句将在 SQL Server 上生成 WHERE 子句。

但是总体经验法则,只需获取您感兴趣的数据。通过网络传输的数据较少,查询通常会运行得更快(只要通过索引等进行了优化),并且您的客户端应用程序要做的工作更少,这是已经只得到了它感兴趣的数据。

于 2012-11-22T11:25:27.537 回答
4

事实上,SQL Server 擅长过滤数据:它就是为此而构建的,因此请始终使用它。如果你在 C# 中过滤;您将无法使用表上的任何索引。它的效率会低得多。

只选择所有行以丢弃许多/大部分是浪费的,它肯定会显示在性能中。

于 2012-11-22T11:24:08.750 回答
1

如果您不使用任何类型ORM的条件,请在数据库级别使用where条件,因为我认为过滤应该在数据库级别进行。

但是,如果您使用类似 ORM 的任何 ORM,Entity Framework或者Linq to SQL从性能的角度来看,它与您的Linq Where子句最终会被翻译成一个SQL Where子句,就您的 usingwhere子句而言IQuerable

于 2012-11-22T11:20:18.777 回答
0

从效率的角度来看,应该是 SQL Server 来完成这项工作。如果它不需要多次数据库调用,那么使用 SQL Server 总是更好的解决方案。但是,如果您已经拥有数据库中的数据集,则可以使用 LINQ 对其进行过滤

于 2012-11-22T11:29:28.113 回答