如果满足以下条件,您可以获得性能提升
- 第二个结果集基于第一个
- 第一个结果集的创建成本很高
考虑以下
CREATE PROC GetTeamsAndUsersForACity(@CityId Int)
BEGIN
DECLARE @Teams as Table (TeamId int, TeamName varchar(10))
INSERT into @Teams
SELECT TeamId, TeamName
FROM
Teams
WHERE
CityId = @CityID
SELECT TeamId, TeamName FROM @Teams
SELECT
UserId, UserName, TeamId
FROM
Users
WHERE
TeamId in (Select TeamID FROM @Teams)
END
请注意我们如何重用@teams 来获取用户和关联的团队,而无需重新查询teams 表。
您可以通过其他方式实现这些结果集。例如,您可以从第一个结果中检索 teamid,然后将其传回 SQL Server 用于第二组。
您也可以再次重新查询团队,例如WHERE TeamId in (Select TeamID FROM Teams where CityID = @CityID)
。
您也可以只获取一个结果集select * from teams inner join users....Where city id= @cityid
,然后将它们拆分到客户端。
每个解决方案的相对性能在第一个集合的大小和生成第一个结果集的查询时间上会有所不同,因此您需要测试哪个适合您的情况。
至于如何从客户端使用 GetTeamsAndUsersForACity。假设您使用的是 .NET,您可以
如果您使用的是 ORM,则必须检查是否支持存储过程中的多个结果