WHERE子句中的Filestream列锁定服务器

时间:2012-02-15 19:31:14

标签: sql sql-server sql-server-2008 sql-server-2008-r2 filestream

我已在SQL Server 2008 r2上的现有数据库中实现了文件流。

现在我有一个非常紧急的问题,因为我的网站现在几乎没有了:

使用这样一个非常简单的表:

CREATE TABLE [dbo].[Table1](
    [Id] [int] IDENTITY(1,1),
    [rowguid] [uniqueidentifier] ROWGUIDCOL  NOT NULL,
    [Image] [varbinary](max) FILESTREAM NULL,
 CONSTRAINT [PK_Table1] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, 
    ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY],
 CONSTRAINT [Table1RowguidUnique] UNIQUE NONCLUSTERED 
(
    [rowguid] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, 
    ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
ALTER TABLE [dbo].[Table1] ADD  CONSTRAINT [DF_table1_rowguid]  DEFAULT (newid()) FOR [rowguid]
GO
ALTER TABLE dbo.Table1
SET ( FILESTREAM_ON = fsfg_LiveWebsite )
GO

如果我跑:

select * from Table1 where Id = 1

它运行得非常快,并给出正确的结果。 如果我使用where子句中的“Varbinary(max)FILESTREAM”字段运行任何内容,则整个表将锁定。 例如,这两个查询中的任何一个:

select Id from Table1 where Id = 1 and [Image] is null
select Id from Table1 where Id = 1 and [Image] = convert(varbinary(max), 'a')

这可能是什么?

请尽快回复任何建议!

谢谢

1 个答案:

答案 0 :(得分:0)

首先,如果您想查询VARBINARY列,则需要启用并使用全文搜索。

参考文章。