繁体   English   中英

我应该在SQL或LINQ中执行Where子句吗?

[英]Should I do the Where clause in SQL or in LINQ?

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

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

编辑

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

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

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

想象一下,表中有20,000行,但您只对其中的100行感兴趣。 当然,仅从源中获取100行并将其发送回来更有效,而不是在Web应用程序中过滤掉的整个批次。

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

但总的经验法则是,只需获取您感兴趣的数据。通过线路获得的数据更少,查询通常运行得更快(只要通过索引进行优化等),而客户端应用程序的工作量就会减少,而且已经只获得了它感兴趣的数据。

事实上,SQL Server擅长过滤数据:这就是它的构建,所以总是要使用它。 如果你用C#过滤; 您将无法使用表中的任何索引。 它的效率会低得多。

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

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

但是,如果您使用任何ORM(如Entity FrameworkLinq to SQL那么从性能的角度来看,它与您的Linq Where子句相同,最终将转换为SQL Where子句,直到您在IQuerable上使用where子句。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM