![]() |
1
6
查询中是否有订单依据?如果必须对10公里的行进行排序,那就相当多了。 此外,检索pk与检索整个CLOB相比,是不公平的测试。Oracle将表行存储在一个块中,其中可能有许多行,但每个CLOB(如果是>4K)都将以脱机方式存储,每个CLOB都存储在一系列块中。因此,扫描pk的列表将会很快。另外,可能在pk上有一个索引,所以Oracle可以快速扫描索引块,甚至不能访问表。 4秒看起来有点高,但是它是2MB,需要从磁盘读取并通过网络传输到Java程序。网络可能是个问题。如果您对会话执行SQL跟踪,它将精确地指示您所花费的时间(磁盘读取或网络)。 |
![]() |
2
5
我过去使用OracleLob类型数据存储大数据的经验并不好。当它低于4K时就可以了,因为它像varchar2一样存储在本地。一旦超过4K,性能就会下降。也许,自从我几年前最后一次尝试后,情况可能有所改善,但下面是我在过去发现的一些东西,供您参考: 由于客户机需要通过Oracle服务器获取LOB,您可以考虑以下有趣的情况。
你提到平均每100只龙虾吃4只,每只龙虾吃40毫秒。记住,每个LOB都需要通过单独的LOB定位器进行检索(默认情况下,它不在结果集中)。对于每个业务线来说,这是一次额外的往返行程,我想(我不完全确定这一点,因为这是一段时间以前的事情),如果是这样的话,我想每一次往返都会有至少5毫秒的连续时间,对吗?如果是这样,那么您的性能首先会受到连续的LOB提取的限制。您应该能够通过跟踪SQL执行与LOB内容获取所花费的时间来验证这一点。或者,您可以通过排除前文答案建议的lob列来验证这一点,该列应该告诉您它是否与lob相关。 祝你好运 |
![]() |
3
4
我遇到了类似的问题,发现JDBCLob在访问Lob时发出网络调用。 从Oracle 11.2g JDBC驱动程序开始,您可以使用预取。 这使访问速度加快了10倍…
|
![]() |
4
2
感谢您提供的所有有用建议。尽管被标记为问题的答案,我的答案是似乎没有好的解决方案。我尝试使用并行语句,不同的存储特性,预先排序的温度。桌子和其他东西。这项行动似乎并不局限于任何通过痕迹或解释计划可见的特征。当涉及到CLOB时,甚至查询并行性似乎也很粗糙。 毫无疑问,在除ATM之外的11g环境中,有更好的选择来处理大型CLOB(尤其是压缩)。我吃了10克。 我现在选择了一个额外的往返数据库,在其中我将把CLOB预处理成一个大小优化的二进制原始文件。在以前的部署中,这一直是一个非常快速的选项,可能值得维护离线计算缓存。在有人想出更好的主意之前,缓存将被禁用,并使用持久性进程和AQ进行更新。 |
![]() |
Sweepy Dodo · JSON lite的格式化 6 月前 |
![]() |
giantjenga · 优化整数向量到二进制向量的转换 8 月前 |
![]() |
Zegarek · Postgresql递归查询未提供预期结果 8 月前 |
![]() |
Joe · 为什么这两个查询之间的性能存在如此大的差异? 11 月前 |
![]() |
tic-toc-choc · 在`dplyr中高效使用列表进行过滤` 11 月前 |