【问题标题】:How to retrieve images faster in SQL Server 2014?如何在 SQL Server 2014 中更快地检索图像?
【发布时间】:2017-02-10 15:58:10
【问题描述】:

我们使用的是 SQL Server 2014(不是 SQL Azure),我已经定义了一个简单的表来存储图像 (.jpg) 和

CREATE TABLE [dbo].[Graphic](
    [GraphicID] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY,
    [FileName] [varchar](100) NOT NULL,
    [FileDescription] [nvarchar](200) NULL,
    [Image] [varbinary](max) NULL
)

存储的图像的最大大小为 1MB,此验证在前端进行。我刚刚插入了 15 张图片,目前表格大小为 5544 KB。 GraphicID 列上有一个主键。没有放置其他索引。

但是,当我使用以下(简单的 SELECT)查询检索一张或多张图片时,需要更长的时间,例如 25 到 30 秒。

select * from [Graphic]
where [GraphicID] = 53

是否有更快的机制在 5 秒内查询 SQL Server 中的图像?

SQL Server 2014 中是否有任何替代的图像保存和检索机制以获得更好的性能?

请帮忙。

谢谢

巴努

【问题讨论】:

  • 您使用什么查询来检索结果?表上有哪些索引?
  • 停止在数据库中存储图像。
  • 性能问题应该包括EXPLAIN ANALYZE和一些关于表大小、索引、当前时间性能、期望时间等的信息。Slow是一个相对术语,我们需要一个真实的值来比较。
  • 谷歌文件流
  • 客户端(执行查询的)相对于服务器在哪里?我看到您有一些与Azure 相关的问题。如果您通过 Internet 获取,那么网络传输可能是主要问题...

标签: sql-server sql-server-2014


【解决方案1】:
CREATE TABLE [dbo].[Graphic](
    [GraphicID] [int] IDENTITY(1,1) NOT NULL,
    [FileName] [varchar](100) NOT NULL,
    [FileDescription] [nvarchar](200) NULL,
    [Image] [varbinary](max) NULL
)

如果这确实是您的架构(而且您似乎非常不确定),那么问题是您从未向表中添加索引。在GraphicID 上添加一个聚集索引,它应该会修复这个特定的访问模式。

另一个注意事项是,如果您知道varbinary 的最大大小(并且您说过您知道),您应该使用它而不是使用max。这样一来,表格布局会将图像存储在行内(最大为一定大小),而不是在末尾追加,从而对于较大的碎片表格来说,行检索 (select *) 会快得多。

【讨论】:

  • 对于他的表来说,大小为 5mb,这无关紧要。是varbinary(max) 搞砸了他。
  • 不,不是,只有在插入时才重要。选择出来比较快。
  • 你可以争论,但他的表中只有 15 条记录。不是 15,000,000。
猜你喜欢
  • 2016-12-06
  • 1970-01-01
  • 1970-01-01
  • 2012-03-03
  • 1970-01-01
  • 1970-01-01
  • 2018-01-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多