是否可以执行在参数数组中传递BLOB字段数据的Array DML INSERT
或UPDATE
语句?我问题中更重要的部分,如果可能的话,包含BLOB数据的Array DML命令是否仍然比逐个执行命令更有效?
我注意到TADParam
有一个AsBlobs
索引属性,所以我认为它可能是可能的,但我还没有尝试过,因为没有提及性能,也没有示例显示这一点,因为索引属性的类型为RawByteString
,不太适合我的需要。
我正在使用FireDAC并使用SQLite数据库(Params.BindMode = pbByNumber
,因此我使用了多个INSERT
的原生SQLite VALUES
。我的目标是尽可能快地存储大约10万条包含非常小的BLOB数据(每条记录大约1kB)的记录(以FireDAC的抽象成本计算)。
答案 0 :(得分:5)
您的主要观点是您使用的是SQLIte3
数据库。
使用SQLite3
,数组DML被模拟"由FireDAC提供。由于它是本地实例,而不是客户端 - 服务器实例,因此无需准备一堆行,然后立即发送它们以避免网络延迟(如Oracle或MS SQL)。
使用Array DML 可以加快SQLite3的插入过程,但我怀疑它会非常高。带有每个数字绑定的良好普通INSERT可以正常工作。
有关您案件表现的主要提示是:
SQlite3非常适合BLOB流程。
From my tests,FireDAC插入时序非常好,非常接近直接SQlite3访问。由于Delphi TDataSet
类的开销,只有读取比直接SQLite3链接慢。