Sql 在该查询中需要-只需从CTE中删除表landingpages,并使用landingpageurlfilters.landingpageid

Sql 在该查询中需要-只需从CTE中删除表landingpages,并使用landingpageurlfilters.landingpageid,sql,sql-server,Sql,Sql Server,e、 g 我认为这与我上面复制的CTE得出的结果相同。首先,您的统计数据看起来非常不一致。估计3700行,实际219000行。这表明,至少统计信息更新可能会改变优化器所做的选择。由于这些行估计,优化器正在选择一个seek和一个嵌套循环操作,其中,根据数据分布,您正在读取表的1/3,600k表的200k行。在这里进行扫描,可能使用散列连接,效率会更高 查询本身没有提供太多的内容来过滤上的[aarhus cluster onesearch staging].[dbo].[LandingPages].

e、 g


我认为这与我上面复制的CTE得出的结果相同。

首先,您的统计数据看起来非常不一致。估计3700行,实际219000行。这表明,至少统计信息更新可能会改变优化器所做的选择。由于这些行估计,优化器正在选择一个seek和一个嵌套循环操作,其中,根据数据分布,您正在读取表的1/3,600k表的200k行。在这里进行扫描,可能使用散列连接,效率会更高


查询本身没有提供太多的内容来过滤上的[aarhus cluster onesearch staging].[dbo].[LandingPages].[PK_LandingPages]表。因此,它将抽取200000行,以便将它们过滤到30行。如果你能找到一种方法在那里进行额外的过滤,你应该会看到性能的提高。

如果你看到我的编辑,我找不到与你之前的问题有什么不同。在我添加所有信息之前,它已经关闭了。我希望所有的新信息都足够了,如果没有,你能告诉我还包括什么吗?我理解。有道理。
    select l.Url, min(f.urlfiltertype) as Filter
    from landingpages l
    join landingpageurlfilters lpf on lpf.landingpageid = l.Url
    join urlfilters f on lpf.urlfilterid = f.id
    where f.groupid = 3062
    group by l.Url
    select lpf.landingpageid AS [Url], min(f.urlfiltertype) as Filter
    from landingpageurlfilters lpf
    join urlfilters f on lpf.urlfilterid = f.id
    where f.groupid = 3062
    group by lpf.landingpageid