网络
首先,由于无论如何使用rowid和rownum是供应商锁定的,因此您应该考虑使用数据库存储的例程.它可以显着减少将数据从数据库传输到应用程序服务器的开销(特别是如果它们位于不同的计算机上并通过网络连接).
考虑到您有8000万条记录要传输,这可能对您来说是最好的性能提升,尽管它取决于线程所做的工作.
显然,增加带宽也将有助于解决网络问题.
磁盘性能
在更改代码之前,请在任务运行时检查硬盘驱动器负载,也许它只是不能处理那么多的I / O(同时读取10个线程).
迁移到SSD / RAID或群集数据库可能会解决此问题.在这种情况下,更改访问数据库的方式不会.
多线程可以解决CPU问题,但是数据库主要依赖于磁盘系统.
行号
如果要使用rowid和rownum实现它,可能会遇到几个问题.
1)rownum是为每个查询的结果动态生成的.因此,如果查询没有显式
排序,并且每次运行查询时某些记录可能具有不同的行编号.
例如,您第一次运行它并获得如下结果:
some_column | rownum
____________|________
A | 1
B | 2
C | 3
然后您第二次运行它,因为您没有显式排序,所以dbms(出于某种已知的原因)决定返回如下结果:
some_column | rownum
____________|________
C | 1
A | 2
B | 3
2)第一点还意味着,如果要对rownum进行过滤,它将生成包含所有结果的临时表,然后对其进行过滤
因此,rownum不是拆分结果的好选择.尽管rowid看起来更好,但它也存在一些问题.
罗威德
如果查看ROWID de