过去,我在查询 varbinary(max) 列时注意到性能很差。可以理解,但在检查它是否为空时似乎也会发生这种情况,我希望引擎会采取一些捷径。
select top 100 * from Files where Content is null
我怀疑它很慢,因为它是
- 需要拉出整个二进制文件,并且
- 它没有被索引(varbinary 不能成为正常索引的一部分)
这个问题似乎不同意我在这里缓慢的前提,但我似乎一次又一次地遇到二进制字段的性能问题。
我想到的一种可能的解决方案是创建一个索引的计算列:
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
这是一个有效的策略吗?当涉及二进制字段时,还有哪些其他方法可以有效地查询?