在过去,我在查询varbinary(max)列时注意到了糟糕的性能.可以理解,但在检查它是否为空时似乎也会发生,我希望引擎会改为采取一些快捷方式.
select top 100 * from Files where Content is null
我怀疑它很慢,因为它是
>需要将整个二进制文件拉出来,并且
>它没有索引(varbinary不能成为普通索引的一部分)
This question似乎不同意我这里缓慢的前提,但我似乎一次又一次地遇到二进制字段的性能问题.
我想到的一个可能的解决方案是创建一个被索引的计算列:
alter table Files add ContentLength as ISNULL(DATALENGTH(Content),0) persisted CREATE NONCLUSTERED INDEX [IX_Files_ContentLength] ON [dbo].[Files] ( [ContentLength] ASC ) select top 100 * from Files where ContentLength = 0