比较在Entity Framework 5中针对Any()与Count()生成的查询的性能

拉杜

在我的项目中,我使用Entity Framework 4.4.0.0,但遇到了以下难题。我必须检查用户是否被激活。我的查询看起来像:

任何()

_context.Users.Any(u => u.Id == userId && u.IsActivated);

生成的sql是:

SELECT CASE
         WHEN ( EXISTS (SELECT 1 AS [C1]
                        FROM   [dbo].[Users] AS [Extent1]
                        WHERE  ( [Extent1].[Id] = @p__linq__0 )
                               AND ( [Extent1].[IsActivated] = 1 )) ) THEN cast(1 AS BIT)
         WHEN ( NOT EXISTS (SELECT 1 AS [C1]
                            FROM   [dbo].[Users] AS [Extent2]
                            WHERE  ( [Extent2].[Id] = @p__linq__0 )
                                AND ( [Extent2].[IsActivated] = 1 )) ) THEN cast(0 AS BIT)
       END AS [C1]
FROM   (SELECT 1 AS X) AS [SingleRowTable1] 

因为Count()我得到这个查询:

SELECT [GroupBy1].[A1] AS [C1]
FROM   (SELECT COUNT(1) AS [A1]
        FROM   [dbo].[Users] AS [Extent1]
        WHERE  ( [Extent1].[Id] = @p__linq__0 )
               AND ( [Extent1].[IsActivated] = 1 )) AS [GroupBy1] 

这看起来正确吗?我不像sql一样好...但是对我来说它看起来不是很有效。我想念什么吗?

是“ select count(*) from dbo.Users where id=@id and IsActivated=1”低效率?

马丁·史密斯

这取决于。

EXISTS实施不是很大无论是。如果有0,它将执行两次检查在那种情况下,那COUNT将是更好的选择,因为它只需搜索不存在的行并将其计数一次。

您可能会发现

_context.Users
        .Where(u => u.Id == userId && u.IsActivated)
        .Select(u=> true)
        .FirstOrDefault();

给出了比两者都更好的计划(根据卢克的建议进行了修订)。在EF4上测试生成的查询的方式如下:

SELECT TOP (1) cast(1 AS BIT) AS [C1]
FROM   Users
WHERE  userId = @userId
       AND IsActivated = 1 

这意味着如果存在多个行,它不会处理不必要的其他行,而只会搜索与WHERE一次匹配的行

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Linq或Entity Framework查询比较列和变量值

来自分类Dev

将巨大列表与Entity Framework中的数据库表记录进行比较

来自分类Dev

NHibernate vs Entity Framework 6针对大量用户的性能

来自分类Dev

NHibernate vs Entity Framework 6针对大量用户的性能

来自分类Dev

在Entity Framework 6中查询多个列

来自分类Dev

Entity Framework Core中的动态查询执行

来自分类Dev

从Entity Framework中自动生成的类继承

来自分类Dev

未从Entity Framework中的表生成的类

来自分类Dev

在Entity Framework中嵌套嵌套

来自分类Dev

Entity Framework Core 中的 SqlGeometry

来自分类Dev

覆盖Entity Framework 5中的SaveChanges

来自分类Dev

无法在Entity Framework 5中检索OriginalValues

来自分类Dev

在Entity Framework中将单个查询生成到1100多个不同的查询中

来自分类Dev

使用Entity Framework生成的错误选择查询(神秘的额外列)

来自分类Dev

Entity Framework 6产生的效率低下的查询

来自分类Dev

将调试信息注入Entity Framework查询

来自分类Dev

如何使用Entity Framework 7记录查询?

来自分类Dev

原始SQL查询和Entity Framework Core

来自分类Dev

哪些版本的Entity Framework支持编译查询?

来自分类Dev

从Entity Framework查询到NHibernate的转换困难

来自分类Dev

Entity Framework Core - 多对多“影子查询”

来自分类Dev

如何避免Entity Framework 6在生成的查询中添加ORDER BY

来自分类Dev

从Entity Framework 6中的集合中删除

来自分类Dev

迁移中的Entity Framework 7复合键

来自分类常见问题

从ID列表更新Entity Framework中的多行

来自分类Dev

使用“迁移”的Entity Framework 6.0.2中的错误

来自分类Dev

在Entity Framework Core中包括集合

来自分类Dev

与Linq相交的Entity Framework实体中的元素

来自分类Dev

使用DTO在Entity Framework中延迟加载

Related 相关文章

  1. 1

    使用Linq或Entity Framework查询比较列和变量值

  2. 2

    将巨大列表与Entity Framework中的数据库表记录进行比较

  3. 3

    NHibernate vs Entity Framework 6针对大量用户的性能

  4. 4

    NHibernate vs Entity Framework 6针对大量用户的性能

  5. 5

    在Entity Framework 6中查询多个列

  6. 6

    Entity Framework Core中的动态查询执行

  7. 7

    从Entity Framework中自动生成的类继承

  8. 8

    未从Entity Framework中的表生成的类

  9. 9

    在Entity Framework中嵌套嵌套

  10. 10

    Entity Framework Core 中的 SqlGeometry

  11. 11

    覆盖Entity Framework 5中的SaveChanges

  12. 12

    无法在Entity Framework 5中检索OriginalValues

  13. 13

    在Entity Framework中将单个查询生成到1100多个不同的查询中

  14. 14

    使用Entity Framework生成的错误选择查询(神秘的额外列)

  15. 15

    Entity Framework 6产生的效率低下的查询

  16. 16

    将调试信息注入Entity Framework查询

  17. 17

    如何使用Entity Framework 7记录查询?

  18. 18

    原始SQL查询和Entity Framework Core

  19. 19

    哪些版本的Entity Framework支持编译查询?

  20. 20

    从Entity Framework查询到NHibernate的转换困难

  21. 21

    Entity Framework Core - 多对多“影子查询”

  22. 22

    如何避免Entity Framework 6在生成的查询中添加ORDER BY

  23. 23

    从Entity Framework 6中的集合中删除

  24. 24

    迁移中的Entity Framework 7复合键

  25. 25

    从ID列表更新Entity Framework中的多行

  26. 26

    使用“迁移”的Entity Framework 6.0.2中的错误

  27. 27

    在Entity Framework Core中包括集合

  28. 28

    与Linq相交的Entity Framework实体中的元素

  29. 29

    使用DTO在Entity Framework中延迟加载

热门标签

归档