【问题标题】:MSSQL - Select NULL values on varbinary columnMSSQL - 在 varbinary 列上选择 NULL 值
【发布时间】:2019-02-26 12:37:13
【问题描述】:

我正在尝试对大约 35.000 行的表进行选择,其中一列是 varbinary,可能有一些 NULL 值,我需要从结果中排除这些 NULL 值。

问题是:当您在 varbinary 列上进行选择时,需要很长时间才能完成,我找到了一种我不确定是否可以使用的方法,或者是执行类似操作的最佳方法那我想听听一些意见。

这里是:

SELECT REQUEST,REQLOCATION,DESCRIPT,BLOBNAME,BLOBSIZE,substring(BLOBVALUE,0,1) AS BLOBVALUE,BLOBMODE,BLOBPATH,BLOBID,
REDIRID,ANALYST,CLIENT,SEVENT,PACKAGE,INSERTDATE
FROM REQBLOB WHERE substring(BLOBVALUE,0,1) IS NOT NULL

varbinary 列是“BLOBVALUE”列,我在其中执行“substring”选择,这个查询立即给了我 20.000 行的结果,我认为它只返回有效数据,而不是 NULL,如您所想关于那个?

【问题讨论】:

    标签: sql-server null varbinary


    【解决方案1】:

    去掉WHERE 中的SUBSTRING,这会使您的查询不可搜索;这就是为什么它很慢。

    SELECT REQUEST,
           REQLOCATION,
           DESCRIPT,
           BLOBNAME,
           BLOBSIZE,
           SUBSTRING(BLOBVALUE, 0, 1) AS BLOBVALUE,
           BLOBMODE,
           BLOBPATH,
           BLOBID,
           REDIRID,
           ANALYST,
           CLIENT,
           SEVENT,
           PACKAGE,
           INSERTDATE
    FROM REQBLOB
    WHERE BLOBVALUE IS NOT NULL;
    

    你为什么要在 varbinary 上使用子字符串..?

    【讨论】:

    • 其实在where子句中做substring并没有让查询变慢,如果我在查询中不使用substring的话会花费很多时间。
    • @JuninhoBill SUBSTRING 很可能会减慢您在WHERE 中的查询速度。如果您的查询仍然很慢,那么这表明您的查询正在带回一个巨大的数据集,并且您没有可以帮助您的数据引擎的索引。这个猜测正确吗?
    • 是的,你是对的,我们有一个没有索引的庞大数据集,如果可能的话,我试图在不创建索引的情况下解决这个问题,我不确定这个和这个这就是我在这里发这篇文章的原因...谢谢!
    • @JuninhoBill 您可以查看执行计划建议。
    • 那么@JuninhoBill 是你的问题。如果您有一个庞大的数据集,并且没有索引来帮助数据引擎,那么它不得不进行全表扫描;当然,这对我来说很慢。如果我给你一本 10000 页的书,所有的页都乱七八糟,让你只把 1000 到 2000 页还给我,你认为你能很快做到吗?如果他们被命令怎么办?我敢打赌,你的答案非常不同。您的数据引擎也是如此。
    猜你喜欢
    • 2018-01-21
    • 2018-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多