当表包含大 blob 时,Django 在远程 Oracle 11 数据库上初始执行选择查询的速度非常慢

问题描述 投票:0回答:1

我实际上了解导致问题的原因,但无法找出适用于 Django 的解决方案。

假设您尝试通过网络从 Oracle 数据库读取 10,000 条记录,通常这会导致 10,000 个网络连接打开和关闭,从而导致性能不佳。

Oracle 的答案是每个连接一次发送 1000 条记录,这显着提高了速度。

但是在我的例子中,每行包含 1-2MB 的 blob,因此尝试预取 1000 条记录意味着在我下载(并保存在内存中)1GB-2GB 的数据之前什么也不会发生。

oracle 的 sqlplus 提供了控制它的选项,可以使用

fast
参数或发出
set rowprefetch 10
但我找不到适用于 Django 的解决方案。

我只想预取 10 条左右的记录

django database oracle prefetch
1个回答
0
投票

您应该能够使用

QuerySet.defer('field_name')
将字段标记为延迟加载。

Django 文档提到了

defer()
的一些注意事项,并建议仅当您真正确定知道自己在做什么时才使用它。例如,如果您的代码访问延迟字段,则会进行单独的 SQL 查询来获取您访问的字段的每个实例。在具有延迟字段的对象上调用
save()
也有一些注意事项。

© www.soinside.com 2019 - 2024. All rights reserved.