小编Ala*_*tts的帖子

在相关表上执行 WHERE EXISTS 时,两个相似查询之间的差异很大

我正在尝试诊断一个问题,即 2 个非常相似的查询导致执行时间非常不同,即使执行计划非常简单。

大体上(我已经修剪了选择和重命名的表),我们有一个主表 ( [Primary]),我们试图根据相关表中至少 1 个匹配行的存在进行过滤。然后我们返回前 20 行(用于分页)

查询之间唯一的区别是相关表不同(尽管具有相似的结构)。快速查询 ( [PrimaryResult]) 需要 < 1 秒,而慢查询 ( [PrimaryScore]) 需要 20 秒左右。

我检查了执行计划,主要区别在于主表上的键查找。在快速查询中,Actual number of rows read大约为 10k,而对于慢速查询,它超过 360 万。

我观察到的另一件事是快速查询似乎并行执行所有操作(由执行计划中的双箭头表示,但慢速查询没有)。

查询是通过 Entity Framework 6 LINQ 生成的(因此所有别名)。

慢查询

SELECT 
    [Project5].[Id] AS [Id]
    FROM ( SELECT 
        [Project1].[Id] AS [Id]
        FROM ( SELECT 
            [Extent1].[Id] AS [Id]
            FROM   [dbo].[Primary] AS [Extent1]
            INNER JOIN [dbo].[GuidBatch] AS [Extent2] ON ([Extent1].[DeviceRegistrationId] = [Extent2].[Ref]) AND (@p__linq__0 = [Extent2].[Id])
            INNER JOIN [dbo].[Place] AS …
Run Code Online (Sandbox Code Playgroud)

sql-server execution-plan

4
推荐指数
1
解决办法
108
查看次数

标签 统计

execution-plan ×1

sql-server ×1