加入收藏 | 设为首页 | 会员中心 | 我要投稿 上饶站长网 (https://www.0793zz.com.cn/)- 数据库平台、视觉智能、智能搜索、决策智能、迁移!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 在varbinary字段上检查ISNULL的策略?

发布时间:2021-04-01 03:48:12 所属栏目:MsSql教程 来源:网络整理
导读:在过去,我在查询varbinary(max)列时注意到了糟糕的性能.可以理解,但在检查它是否为空时似乎也会发生,我希望引擎会改为采取一些快捷方式. select top 100 * from Files where Content is null 我怀疑它很慢,因为它是 需要将整个二进制文件拉出来,并且 它没有索

在过去,我在查询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

这是一个有效的策略吗?当涉及二进制字段时,有哪些其他方法可以有效地进行查询?

解决方法

我认为它很慢,因为varbinary列不是(也不能)索引的.因此,您使用计算(和索引)列的方法是有效的.

但是,我会使用ISNULL(DATALENGTH(Content),– 1),以便您可以区分长度0和NULL.或者只使用DATALENGTH(内容).我的意思是,Microsoft SQL Server不是Oracle,其中空字符串与NULL相同.

(编辑:上饶站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读