gpt4 book ai didi

sql-server - 分组SQL Server请求

转载 作者:行者123 更新时间:2023-12-03 18:28:58 25 4
gpt4 key购买 nike

这个问题与SQL中的分组无关。

假设一个应用服务器位于应用程序的用户界面和SQL Server之间。该服务器当然向SQL Server发出SQL请求。对于每个这样的请求,都会有一些不小的开销。我很好奇是否有一种方法可以将多个请求分组并一起发送,从而减少通信开销。

例如,服务器要进行查询,例如

Select * from teams...




Select * from users...


而不是单独处理它们,它将发送类似 List<sqlRequest>的内容并接收回 List<sqlResponse>的内容(当然对程序员是透明的)。

在我的特定情况下,我正在使用SQL Server。更笼统地说,是否有任何SQL数据库服务器/ SQL映射框架能够做到这一点?这样做值得(会)值得付出努力吗?

最佳答案

如果您可以提高性能,


第二个结果集基于第一个结果集
第一个结果集创建起来很昂贵


考虑以下

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,则可以


使用 SqlDataReader.NextResult
使用 LINQ to SQL via the IMultipleResults interface
使用 DataSet.Load Method (IDataReader, LoadOption, String[])或DataAdapter.Fill()之一


如果您使用的是ORM,则必须从存储过程中检查是否支持多个结果

关于sql-server - 分组SQL Server请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10205198/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com