关于oracle抽取数据的问题?
最近遇到这样一个问题。源oracle有一个包含7亿数据的视图。这个表是第三方的,我们只有读权限。除主键外,源视图没有索引。现在我们必须将其中的所有数据同步到我们的数据库中。我用分页的,从一页中提取5000个片段。刚开始很快,一页数据几百毫秒,越慢。现在找出一页数据差不多要一个小时。以这种速度,你可以不要在一年内全部提取,你可以不要添加索引或任何东西。有什么方法可以提高提取效率吗?
水壶工具非常方便
工具太多:你的需求是一次性的还是多次的?1.如果是一次性的,用oracles自己的数据以极快的速度,然后同步到目的地,再导入。2.如果是多次,你对时效性有什么要求?如果要求高,可以用CDCs实时提取。详细的方案可以参考我的文章,里面有具体的步骤和效果。如果实时性要求不高,该方案可以使用传统的
如何使用oraclehelper?
Pagehelper是mybatis封装的分页查询接口,支持oracl
oracle对于多个大表关联操作如何优化速度?
1、首先,建立一个合适的指数。Sql没有在索引字段中添加函数来保证索引生效。如果是复合索引,注意sql中的顺序。如果索引已经存在,建议您先重建索引,因为大型数据表的索引在维护的一个阶段比较混乱,一般建议重建。一般速度可以提高几十倍。
2.数据量最大的表放在前面,数据量最小的表放在后面。Sql从最末端开始向后解析。
3.其次,要把最有效的缩小范围的条件放在sql的末尾。尤其是主键或索引字段的条件。
4.保证你的sql算法的合理性。保证复杂度和空间的合理性。
5.必要时使用存储过程。速度提高30%-40%
6.建议您逐页阅读,而不是一次性阅读所有数据。(使用rownum),一次数据太多会造成内存不足。如果对这些都不满意,可以考虑建立几个表空间,然后按照一种算法(表分区)把每个表的数据均匀地放在每个表空间中。选择时,数据库会使用多线程对每个表空间中的数据进行索引,一般不用于千万级的表。不是每个人都能用的。