When是从SQL Server下载的值(为了性能考虑)
本文关键字:性能 SQL 是从 Server 下载 When | 更新日期: 2023-09-27 18:08:28
使用正常的SqlDataReader
从SqlCommand
与SqlConnection
,我想知道:什么时候是一个值从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时,它将保留模式,但只传递null。