sql - LINQ 中的 count VS select - 哪个更快?

标签 sql linq performance iqueryable

我正在使用 IQueryable<T>在我的整个应用程序中进行接口(interface),并将数据库上的 SQL 执行推迟到像 .ToList() 这样的方法

我有时需要找到某些列表的计数 - 而无需使用正在计数的列表中的数据。根据我的 SQL 经验,我知道 SQL COUNT() 对数据库的工作量远低于返回所有行的等效 SELECT 语句。

所以我的问题是:从 IQueryable<T> 返回计数会减少数据库的工作量吗?的Count()比渲染 IQueryable<T> 的方法到列表并调用列表的 Count()方法?

我怀疑它会给出 ToList()将触发 SELECT sql,然后在单独的查询中计算行数。我希望 Count()IQueryable<T>只是为 sql COUNT() 查询呈现 sql。但我不确定。你知道吗?

最佳答案

调用ToList()将返回正版List<T>包含所有数据,这意味着获取所有数据。不好。

调用Count()确实应该呈现 SQL 以在数据库端进行计数。好多了。

然而,检查这一点的最简单方法是在您的数据上下文中启用日志记录(或您的特定提供者的任何等效项)并查看实际发送的查询。

关于sql - LINQ 中的 count VS select - 哪个更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/552909/

相关文章:

mysql - 两个表之间的数据合并

c# - 不能将 lambda 表达式用作动态分派(dispatch)操作的参数,而不先将其转换为委托(delegate)或表达式树类型

c# - 使用嵌套选择 LINQ 循环数组

linux - Linux 上的快速用户空间进程间通知方法?

mysql - 当我们在mySQL中使用UNION时,如何获取不同列上的查询结果?

mysql - 检查多个列是否重复并列出所有记录

sql - 从 DDL 文件中提取表名

c# - 使用 LINQ 枚举的正确方法是什么?

c++ - 在 while 循环中嵌套 while 循环和在 while 循环中嵌套 if-else 循环有什么显着区别吗? (C++)

javascript - JS执行时间