When是从SQL Server下载的值(为了性能考虑)

本文关键字:性能 SQL 是从 Server 下载 When | 更新日期: 2023-09-27 18:08:28

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

我主要关心的是视图中有一些BLOB字段。有时我会从带有BLOB数据的视图中抓取数据,有时我会将它们去掉以提高速度。我想知道我是否应该创建一个不包含BLOB字段的不同视图,以加快性能(如防止BLOB数据被下载到机器)。

或者用reader.GetBytes来避免抓取值是否足够?

When是从SQL Server下载的值(为了性能考虑)

如果您刚刚调用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时,它将保留模式,但只传递null。