gpt4 book ai didi

sql - 为什么我的 Entity Framework 查询 Single 速度很慢?

转载 作者:行者123 更新时间:2023-12-02 21:00:24 30 4
gpt4 key购买 nike

我有一个非常简单的查询,但速度非常慢。 Entity Framework Profiler 表示大约需要 100 毫秒。

dbContext.Users.Single(u => u.Id == userId);

经过一番尝试后,我发现一个查询非常相似,但速度更快(大约 3 毫秒)。

dbContext.Users.Where(u => u.Id == userId).ToList().Single();

当我比较两个查询的 sql 时,第二个查询没有使用嵌套 SELECT 且没有 TOP 操作。但我不会仅仅因为这两件事就期望它快 30 倍。此外,当使用 SQL Server Management Studio 执行查询时,没有可测量的差异。

当我查看执行计划时,它们都进行聚集索引查找,其查询成本为 100%。而额外的 select 和 Top 操作的查询成本为 0%。EFProfiler 的查询计划也是如此,表明它应该没有任何区别。

在这种情况下,我该怎么做才能更好地了解查询性能?

下面是第一个查询的结果 SQL。

SELECT [Limit1].[Id]                     AS [Id],
[Limit1].[EmailAddress] AS [EmailAddress],
[Limit1].[FirstName] AS [FirstName],
[Limit1].[LastName] AS [LastName]
FROM (SELECT TOP (2) [Extent1].[Id] AS [Id],
[Extent1].[EmailAddress] AS [EmailAddress],
[Extent1].[FirstName] AS [FirstName],
[Extent1].[LastName] AS [LastName]
FROM [dbo].[Users] AS [Extent1]
WHERE ([Extent1].[Id] = 'b5604f88-3e18-42a5-a45e-c66cc2a632d3' /* @p__linq__0 */)
AND ('b5604f88-3e18-42a5-a45e-c66cc2a632d3' /* @p__linq__0 */ IS NOT NULL)) AS [Limit1]

这里是第二个(更快)查询的 SQL。

SELECT [Extent1].[Id]                     AS [Id],
[Extent1].[EmailAddress] AS [EmailAddress],
[Extent1].[FirstName] AS [FirstName],
[Extent1].[LastName] AS [LastName]
FROM [dbo].[Users] AS [Extent1]
WHERE ([Extent1].[Id] = 'b5604f88-3e18-42a5-a45e-c66cc2a632d3' /* @p__linq__0 */)
AND ('b5604f88-3e18-42a5-a45e-c66cc2a632d3' /* @p__linq__0 */ IS NOT NULL)

最佳答案

您真正想要的是dbContext.Users.Find(id) - 如果不需要,它甚至不会访问数据库。查看更多详细信息msdn .

关于sql - 为什么我的 Entity Framework 查询 Single 速度很慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23518680/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com