当前位置: 首页 > 面试题库 >

检查varbinary字段上的ISNULL的策略?

穆锋
2023-03-14
问题内容

过去,我曾在查询varbinary(max)列时注意到糟糕的性能。可以理解,但是在检查它是否为null时也似乎会发生,我希望引擎改用一些捷径。

select top 100 * from Files where Content is null

我会怀疑它很慢,因为它

  1. 需要拉出整个二进制文件,并且
  2. 它没有索引(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

那是有效的策略吗?当涉及二进制字段时,还有什么其他方法可以有效地查询?


问题答案:

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

但是,我将改用ISNULL(DATALENGTH(Content),-1)长度,以便您可以区分长度0和NULL。或只是使用DATALENGTH(Content)。我的意思是,Microsoft SQLServer不是Oracle,其中空字符串与NULL相同。



 类似资料:
  • 问题内容: 我有以下几点: 如果@VariableEqualToZero为null,它将替换为1。如果@VariableEqualToZero = 0,也需要它替换为1。我该怎么做呢? 问题答案:

  • 问题内容: 我正在尝试确定对象上字段的类型。当对象传递给我时,我不知道对象的类型,但我需要查找为s的字段。区分框s 很容易,但是原始图元似乎更加困难。 我 可以 确保传递给我的对象只有,没有基元,但我宁愿没有。所以我有: 一种似乎可行的hacky方法是: 如果有的话,我真的很希望有一种更清洁的方法。如果没有更好的方法,那么我认为要求我接收的对象仅使用(not )将是更好的API。 有任何想法吗?

  • 我有Spring控制器,它使用构造函数注入来满足服务层依赖性。效果很好。现在,在组织中有一些旧的代码来双重检查依赖关系是否有效。我认为这是一个反模式,因为它是与横切关注点相关的代码,被注入的客户端不应该担心这一点。 如果无法解析依赖关系,则 IoC 容器 (Spring) 将引发相应的错误(UnSatisfiedLink 或其他),使用这些服务的客户端应该与如何或是否正确注入这些依赖关系无关。它应

  • 我在JOOQ中有一个查询,其中包含一个带有另一个表的左OUTER JOIN。这是有意的,因为不能保证相应的记录会存在,在这种情况下,我仍然希望从以前的表中检索值,并为缺失的字段提供默认值。 但是,由于带有默认参数的函数已被弃用,我如何检查字段是否包含空值? 使用字符串很容易,但布尔值只返回为,这意味着我无法检查它是否真的设置为false,或者它正是JOOQ决定返回的。 我试过: 但是这不起作用,因

  • 问题内容: 我在Google Cloud Firestore中的查询条件有问题。 下面是我的代码,以获得第一个以HA_开头的文档并按ID DESC排序 我想获取文章ID为“ HA_”或“ XE_”开头的文章的最后ID 例如上图: if(articleId以“ HA_”开头)=>返回id 831的对象 if(articleId以“ XE_”开头)=>返回ID为833的对象 现在我得到一个错误 jav

  • 如何对同一嵌套下的多个字段执行“必须”“匹配”查询?这是一个可复制的ES索引,其中“用户”字段定义为“嵌套”类型。 这里有2份文件: 对于这个索引,如何查询“John”和“Alice”都存在的文档?使用上面定义的索引,我希望得到的是文档1,而不是文档2。到目前为止,我已经尝试了以下代码,但没有收到任何结果: