预分配的varbinary(最大)无空数据实际发送到SQL Server?(Pre-allocate

2019-09-29 15:17发布

我存储数据的VARBINARY(max)列,并且对于客户端性能的原因,通过分块写入“.WRITE()”函数使用SQL Server 2005的这个伟大的工程,但是由于副作用,我想避免所述varbinary列各追加期间动态上浆。

我想要做的是通过预分配varbinary列到我想要的尺寸优化此。 例如,如果我要下降到2MB我想首先“分配”的列的列,然后使用.WRITE偏移/长度参数的真实数据。

有没有在SQL任何可以帮助我在这里? 很显然,我不想空字节数组发送到SQL服务器,因为这将部分地战胜.WRITE优化的目的。

Answer 1:

如果您使用的是(MAX)数据类型,则上述8K任何进入行溢出存储,而不是在页面存储。 所以,你只需要投入足够的数据来得到它的8K的行,使这占用的页分配行,其余进入行溢出存储反正。 还有更多的一些在这里 。

如果你想预分配的一切,包括行溢出数据,你可以使用一个类似于(例如做10000个字节):

SELECT CONVERT([varbinary](MAX), REPLICATE(CONVERT(varchar(MAX), '0'), 10000))


Answer 2:

首先荣誉所提供的答案 - 这是一个很大的帮助! 但是,你可能要考虑一个细微的变化。 上述实际的代码分配VARBINARY场与转换零字符(十六进制码的0x30)。 这可能不是你真正想要的东西,特别是如果你想以后在球场上执行二进制操作。 我觉得是比较有用的是一个NUL值(十六进制代码0×00),使所有的位都默认是关闭的分配领域。 要做到这一点,只需做如下更正:

SELECT CONVERT([varbinary](MAX), REPLICATE(CONVERT(varchar(MAX), CHAR(0)), 10000))



文章来源: Pre-allocate varbinary(max) without actually sending null data to the SQL Server?