小编Mik*_*keH的帖子

包含所有列的空结果需要更长的时间

我每 1 秒执行一次查询,大部分时间它不返回任何结果(由实体框架生成的 SQL):

SELECT TOP (5) 
   [Extent1].[ID] AS [ID],
   ***30 more columns***

   FROM ParentTable AS [Extent1]
   WHERE ([Extent1].[ImageTaken] = 1) AND ([Extent1].[ImageProjected] <> 1) AND ( EXISTS (SELECT 
      1 AS [C1]
      FROM ChildTable AS [Extent2]
      WHERE [Extent1].[ID] = [Extent2].[Parent_ID]
   ))
Run Code Online (Sandbox Code Playgroud)

上面的查询大约需要 400 毫秒。但是,如果我从结果中排除除 ID 之外的所有列,则大约需要 100 毫秒。

如果没有结果,为什么执行时间如此不同?我查看了执行计划,它们看起来完全相同(在今天之前我从未看过执行计划,因此请谨慎对待)。

我想包括所有列,但显然我只在有结果时才需要它们。

实际执行计划

所有列

仅 ID 列

编辑 更多细节:

  • 我正在使用 SQL Server Express 2017
  • SQL Server 在我的本地机器上
  • 父表有大约 100 万行
  • 子表有 ~40k 行

父表定义


    USE [DB]
    GO

    /****** Object:  Table [dbo].[Inspection_CapturedImageQueueItem]    Script …
Run Code Online (Sandbox Code Playgroud)

performance sql-server entity-framework sql-server-2017 query-performance

5
推荐指数
1
解决办法
179
查看次数