对文件流 blob 表具有 where 条件的查询,从不仅在某些服务器上返回

Query with where condition on the filestream blob table never returning only on some servers

提问人:UnDiUdin 提问时间:3/14/2023 最后编辑:UnDiUdin 更新时间:3/14/2023 访问量:22

问:

强文本a我有一个查询,它从带有列的表中最多返回一行,使用以下条件:FILESTREAM

select * from TABLE_WITH_FILESTREAM_BLOBS
where BLOB IS NULL AND ID_BLOB = 99

但是,在某些数据库上执行此查询时,此查询永远不会返回。如果我删除该条件,查询将按预期返回:BLOB IS NULL

select * from TABLE_WITH_FILESTREAM_BLOBS
where ID_BLOB = 99

我怀疑该问题与表中的大量记录有关,并且服务器需要读取所有 blob 才能返回有效响应。

是否有任何服务器设置可以调整以避免此问题?还是根本无法以高性能的方式在列上使用子句?WHEREFILESTREAM

我的目标是让服务器返回,否则我的应用程序会卡住。

UPDATE:查询是这样的

(@P0 int)SELECT ID_BLOB, BLOB_DATA FROM MY_BLOB_TABLE
WHERE ID_BLOB= @P0 AND BLOB_DATA IS NULL 

所以这是一个参数化查询,难道因为是参数化而触发了全表扫描,即使有条件将 seacrh 重新搅拌到只有一条记录 ()?WHERE ID_BLOB= @P0

谢谢!

sql-server sql-server-2008-r2 文件流

评论

1赞 Charlieface 3/14/2023
可能导致引擎加载每一行的整个文件。过滤后的索引可能很有用。请展示完整的表定义,并通过 pastetheplan.com 共享查询计划CREATE INDEX IX_Nulls ON TABLE_WITH_FILESTREAM_BLOBS (ID_BLOB) WHERE (BLOB IS NULL)
0赞 UnDiUdin 3/14/2023
感谢您的回复。事实上,我重新检查了查询,查询是选择ID_BLOB,BLOB_FIELD在哪里......因此,即使是索引,谁来解决这个问题也是一个问题。不应该进行查询,因为查询是由框架完成的,我必须将问题报告给框架供应商,因为我无法控制它,而且查询是无用的,所以这是一个框架错误。老实说,这个问题是无望的,无论如何你都可以回答,我会答应的。谢谢
0赞 UnDiUdin 3/14/2023
我研究得更多了,我发现查询是一个参数化查询,检查问题末尾的 UPDATE 部分。谢谢!
0赞 Charlieface 3/14/2023
我再说一遍:请显示包括索引在内的完整表定义,并通过 pastetheplan.com 共享查询计划
0赞 UnDiUdin 3/15/2023
好的,这里 brentozar.com/pastetheplan/?id=BkVLyN0Jh 我不知道如何查看参数查询的执行计划。查询实际上是参数化的。

答: 暂无答案