gpt4 book ai didi

entity-framework - Entity Framework : query executing 'select from' for no reason

转载 作者:行者123 更新时间:2023-12-04 08:33:25 25 4
gpt4 key购买 nike

我在使用 Entity Framework 时遇到了一些问题。我正在从数据库的 View 中执行一个简单的选择。但是,当我查看 EF 生成的 SQL 时,它使用 select from 执行了两次查询。这是它应该的运作方式吗?看起来效率很低。

var reads = (from rt in ctx.C2kReadsToTransfer
where rt.ReadDt > fromDate
&& rt.ReadDt < toDate
select rt);

这会被翻译成下面的 SQL

SELECT 

[Extent1].[AMRID] AS [AMRID]
, [Extent1].[Comments] AS [Comments]
, [Extent1].[ExternalSystemType] AS [ExternalSystemType]
, [Extent1].[LastReadDt] AS [LastReadDt]
, [Extent1].[ReadDt] AS [ReadDt]
, [Extent1].[Reading] AS [Reading]
, [Extent1].[Units] AS [Units]
, [Extent1].[Transferred] AS [Transferred]



FROM
(SELECT
[ReadsToTransfer].[AMRID] AS [AMRID]
, [ReadsToTransfer].[Comments] AS [Comments]
, [ReadsToTransfer].[ExternalSystemType] AS [ExternalSystemType]
, [ReadsToTransfer].[LastReadDt] AS [LastReadDt]
, [ReadsToTransfer].[ReadDt] AS [ReadDt]
, [ReadsToTransfer].[Reading] AS [Reading]
, [ReadsToTransfer].[Transferred] AS [Transferred]
, [ReadsToTransfer].[Units] AS [Units]
FROM [dbo].[ReadsToTransfer] AS [ReadsToTransfer])
AS [Extent1]

这似乎非常低效,尤其是当表像我们这样包含接近 2.5 亿行时。此外,如果我将 .Take(2000) 添加到代码的末尾,它只会在第一个选择上放置一个“select top 2000”。因此,使其选择内部选择的前 2000 个,即整个表。

对此有什么想法吗?

最佳答案

That seems to be very inefficient

我不这么认为...外部 SELECT 只是内部 SELECT 的投影(实际上是身份投影),投影对性能的影响可以忽略不计...

关于 TOP 2000 子句,它在外部 SELECT 上的事实并不意味着数据库将从内部 SELECT 读取所有行;只要外部 SELECT 请求它们,它就会读取它们,然后停止。

只需尝试手动运行查询,使用或不使用外部 SELECT :我敢打赌您不会发现任何显着的性能差异。

关于entity-framework - Entity Framework : query executing 'select from' for no reason,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2241656/

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