oracle 对于多个大表关联操作如何优化速度?

如题所述

1、首先要建立适当的索引。sql在索引字段不要加函数,保证索引起效。如果是复合索引注意在sql的顺序。如果已经存在索引,建议你先重建索引先,因为大数据表的索引维护到了一个阶段就是乱的,一般建议重建。建立好的一般可以获得几十倍的速度提升。
2、最大数据量的表放在最前,最小的表放在最后面。sql是从最后面开始反向解析的。
3、其次是要把最有效缩小范围的条件放到sql末尾去。尤其是主键或者索引字段的条件。
4、保证你sql的算法合理性。保证复杂度和空间度的合理性。
5、必要时候使用存储过程。提升30%-40%的速度
6、建议你分页读取不要一下读完所有的数据。(使用rownum),一下子数据太多会使得内存不够用的。

如果这些都做了还不满意的话,可以考虑建立几个表空间,然后按照一个算法将各个表的数据,平均的放在各个表空间内(分表分区),在select的时候数据库就会使用多线程到各个表空间索引数据,这个一般不是上千万级的表是不用的。 也不是所有人都会用。
温馨提示:内容为网友见解,仅供参考
第1个回答  2017-08-18
主要是索引 一定要合理 最优化。
第2个回答  2011-06-07
按照正常的动态规划方法进行优化连接顺序,如果表的数量太多,可能会使用遗传算法(是否在ORACLE中实现不太清楚)优化连接顺序.
两个表数据量很大的话应该会使用嵌套循环连接方法.追问

表的数量不多,最多3个大表,数据量比较大。嵌套循环连接是怎么连接,能详细说一下吗?谢谢~~

追答

嵌套循环连接就是先从一个表A中读一部分数据到内存,然后与另一个表B的数据依次连接,第二次再从表A中读一部分数据,再与表B的所有数据连接,假设表A大小为X,表B大小为Y,内存大小为M+1,执行代价为(X/M)*Y+X,通常表A选择较小的关系.
如果关系很小的话可以用HASH 连接,表上有索引的话可以用基于索引的连接方法

本回答被网友采纳
第3个回答  2011-06-07
多表连接可以先生成几个中间视图,最后再把这几个视图进行相应的连接追问

大家都说建视图可以提高查询速度,但是我试了试,速度好像没有提升。请问你的中间视图是什么意思?

相似回答