Sql server 基于另一个结果集的sql server查询结果

Sql server 基于另一个结果集的sql server查询结果,sql-server,join,query-performance,Sql Server,Join,Query Performance,我的要求如下 InstituteId作为参数传递给我的查询,我需要获取所有注册该学院提供的任何课程的学生ID,他们应该是全日制学生 很少有用户注册了,但他们没有注册任何课程,很少有用户注册了超过1门课程,在这种情况下,我只需要显示此用户一次 SELECT DISTINCT s.StudentId, f.[RegistrationId] from dbo.[Student] s INNER JOIN dbo.FulltimeStudent f on s.StudentId = f.Stundent

我的要求如下

InstituteId作为参数传递给我的查询,我需要获取所有注册该学院提供的任何课程的学生ID,他们应该是全日制学生

很少有用户注册了,但他们没有注册任何课程,很少有用户注册了超过1门课程,在这种情况下,我只需要显示此用户一次

SELECT DISTINCT s.StudentId, f.[RegistrationId] from dbo.[Student] s
INNER JOIN dbo.FulltimeStudent f on s.StudentId = f.StundentId 
WHERE CourseId in (
SELECT CourseId from dbo.[Institute] WHERE InstituteId = @InstututeId 
)

我发现上述方面存在一些性能滞后,我想知道是否有更好的方法来实现上述目标?

执行计划是什么样的?索引是否涵盖了涉及的字段(所有表中的StudentID、CourseId、InstituteId)?如果这些字段不是indexedA SQL查询未按原样执行,则更改查询不会提高性能。查询引擎根据基础类型、索引和统计信息将其转换为执行计划。如果期望一个操作返回多行,它可能选择一个执行计划;如果期望多行,它可能选择一个非常不同的执行计划。执行计划是实际执行的内容,并显示可能错误的内容
存在
如果是大型结果集,通常会执行得更好,因为如果1行匹配,执行可以停止,而不是在中。但正如@PanagiotisKanavos所说,实际的执行计划。因此,我们知道使用/需要哪些索引。您可能还受到参数嗅探的困扰,但我们目前无法判断。