如何在SQL Server 2014中更快地检索图像?

问题描述:

我们使用SQL Server 2014(不SQL Azure的),我已经定义了一个简单的表来存储图像(.JPG)和如何在SQL Server 2014中更快地检索图像?

存储图像的
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中的图像?

是否有任何替代SAVE &对SQL Server 2014中图像的RETRIEVE机制以获得更好的性能?

请帮忙。

感谢

巴努•

+3

你用来检索结果的查询是什么?你有什么指标在桌子上? – strickt01

+1

停止将图像存储在数据库中。 – Phill

+1

性能问题应该包括'EXPLAIN ANALYZE'和一些关于表格大小,索引,当前时间表现,期望时间等的信息。'Slow'是一个相对术语,我们需要一个真实值来比较。 –

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 *)速度会快很多。

+0

在他的桌子5mb大小,这无关紧要。这是'varbinary(max)',正在把他搞砸。 – ajeh

+0

不,它只是在插入时很重要。选择它比较快。 – Blindy

+0

你可以争辩,但他在表格中只有15条记录。不是15,000,000。 – ajeh