什么时候从 SQL 服务器下载一个值(为了性能)

When is a value downloaded from SQL Server (for performance)

使用来自 SqlCommand 的正常 SqlDataReaderSqlConnection,我想知道:什么时候从 sql 服务器将值下载到我的机器?是当我调用 reader.Read() 还是当我实际使用 reader.GetBytes 获取值时?

我主要担心的是视图中有一些 BLOB 字段。有时我会使用 BLOB 数据从视图中获取数据,有时我会将它们放在外面以加快速度。我想知道我是否应该创建一个不包含 BLOB 字段的不同视图以提高性能(如防止将 BLOB 数据下载到计算机)。

或者是否足以避免使用 reader.GetBytes 获取值?

如果您刚刚调用了 ExecuteReader()ExecuteReader(CommandBehavior) 并且没有设置 CommandBehavior.SequentialAccess 标志,那么当您调用 reader.Read().

时将发生读取

如果您使用 .ExecuteReader(CommandBehavior.SequentialAccess),它将在您请求时读取值,但您必须按照您在查询中指定的相同顺序请求列,并且在移动到之前必须完整读出每一列下一行。

根据您的描述,当您不需要 blob 数据时,您不应该将列包含在 BLOB 中,您可以保持架构相同,只需进行两个查询

select Col1, Col2, BlobData from Foo

当你想要 blob 并且

select Col1, Col2, cast(null as varbinary(max)) as BlobData from Foo

当您不想要 blob 时,它会保留架构但只传入空值。