【问题标题】:Issue with varbinary(max) datatype in Sql ServerSql Server 中 varbinary(max) 数据类型的问题
【发布时间】:2015-06-18 18:55:58
【问题描述】:

我创建了一个包含两列数据类型为varbinary(max) 的表。我在这些列中以二进制格式保存 pdf 文件。在这些列中插入 pdf 文件时没有问题。但是,当我在select 查询中选择甚至只有一列类型为varbinary 的单个记录时,获取记录大约需要一分钟。插入的pdf文件大小为1MB。这是获取单个记录的 sql 查询:

select binarypdffile from gm_packet where jobpacketid=1

如果有办法使用varbinary 数据类型提高性能,请提出建议。

【问题讨论】:

  • 您使用的是 2008、2008 R2 还是 2014 的哪个版本?
  • 你可以为表gm_packet添加架构和索引
  • 这是什么网络连接?这是我能想象到的唯一现实原因。
  • @ughai,感谢您的回复。我同时使用 2008 R2 和 2014。如果我将在 gm_packet 上添加索引,那么插入将非常慢,因为在插入时总是重新排列索引。
  • @usr 我只是在 SSMS 中执行 sql 查询,它花费了太多时间来获取这条记录。

标签: sql-server sql-server-2008 sql-server-2008-r2 sql-server-2014 query-performance


【解决方案1】:

您能否尝试对以下查询进行计时:

SELECT cnt = COUNT(*) INTO #test1 FROM gm_packet WHERE jobpacketid = 1

SELECT binarypdffile INTO #test2 FROM gm_packet WHERE jobpacketid = 1

第一个测试找到记录需要多长时间。如果速度慢,请在 jobpacketid 字段上添加索引。假设这些值是按顺序出现的,我不会担心将来添加记录时的性能。否则您可能需要不时重建索引。

第二个测试从表中获取数据(并将其存储回另一个表)需要多长时间。由于没有数据从“系统”流出,因此它应该显示“原始数据库性能”而不受任何“外部”影响。

两者都不应该很长。如果不是,但仍然需要“很长时间”才能在 SSMS 中运行原始查询并在网格中获取二进制数据,那么我猜这要么是网络问题(wifi?),要么 SSMS 非常糟糕在 GUI 中表示 blob;之前已经注意到了=)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-23
    • 2010-09-08
    相关资源
    最近更新 更多