实际执行计划中的最高成本部分不显示任何逻辑读取?
在以下查询计划中-https://www.brentozar.com/pastetheplan/?id=H1dwOCHed(它有3个部分,最后一个是问题所在),在最底层有一个节点消耗了37%的资源。这是实际
解答动态
即使在实际执行计划中,%的成本仍然只是一个估算。您需要在这里查看行源代码级别的统计信息来告诉您每个步骤花费了多少时间。
根据XML判断,274ms被占用到节点7的散列连接点,其中72ms只是Pk\u TeamMembers(节点8)的集群扫描,35ms被占用到左半连接点(节点9)。这意味着执行Hash Join步骤需要167ms的时间(可能是为263分配内存,来自Pk\u TeamMembers的600行)。
看起来您已经尝试将此加入作为目标前:
左连接TeamMembers tm开启AF.CompletionUserID= tm.UserID以及AF.团队ID= tm.团队ID以及tm.团队ID=t.TeamID—重载以帮助L查找索引1您可能希望对此索引执行(外部)嵌套循环。查询计划程序决定使用哈希联接,因为它认为您将从该联接的另一端获得59000行,而实际上您得到的是3。
您有choices
Hint,因此使用嵌套循环联接。请说明计划程序认为它将有这么多行的原因,并给它一些帮助(统计信息,简化筛选) 该提示将看起来像是2 left LOOP JOIN TeamMembers tm onAF.CompletionUserID= tm.UserID以及AF.团队ID= tm.团队ID以及tm.团队ID=t.teamid 由于驾驶过滤器的复杂性,第二个选择将特别困难。一种方法是插入与主驱动筛选器匹配的行,然后在主查询中连接到此临时表。在这里,您似乎需要首先将5个表中的3个表连接在一起,以便使用@userId@过滤器公平地说:来自ActivityFeed的
AF JOIN活动类型A ONAF.活动类型=A.ActivityType LEFT JOIN Teams t开AF.团队ID=t.teamId其中AF.SearchIndexUpdate日期为NULL—仅获取不在搜索索引中的项,并 AF.Active=1和A.Active=1和(A.AdminOnly=0或AF.团队ID在(从@tmpFindAdminFlagsForTeamsMembershipsForUser x中选择TeamID,其中x.IsAdmin=1)和((A.TeamOnly=1和AF.团队ID在中(从@tmpFindAdminFlagsForTeamsMembershipsForUser x中选择TeamID,其中A.HideWhenOwnerless=0或x.IsOwnerless=0)和(A.ShowSelf=1或AF.CompletionUserID<;gt;@UserID)和ISNULL(t.IsDeleted,0)=0,t.active=1和(A.IncludeOnsite=1或存在(从@tmpFindAdminFlagsForTeamsMembershipsForUser x中选择1,其中x.TeamID=AF.团队ID和x.IsOnsiteOwner=0)或(A.UserOnly=1和AF.UserID=@用户ID))和--不包括受调节的活动(所有者调节操作位于组活动视图API\u GetActivityFeedByTeam中)中庸的=0和--如果选择退出,则不向其他团队成员显示完成或计划完成(tm.ShowUserActivityInFeed)(ISNULL(A.ShowOnlyWhenUserActivityActive,仅当用户活动处于活动状态时显示,0)=0或(A.ShowOnlyWhenUserActivityActive=1和tm.ShowUserActivityinFeed=1)和(AF.团队ID为NULL或AF.团队ID在中(从@tmpFindAdminFlagsForTeamsMembershipsForUser中选择TeamID作为x))- End
免责声明:
本页内容仅代表作者本人意见,若因此产生任何纠纷由作者本人负责,概与琴岛网公司无关。本页内容仅供参考,请您根据自身实际情况谨慎操作。尤其涉及您或第三方利益等事项,请咨询专业人士处理。