如何优化Oracle查询大表?(oracle查询大表)

Oracle 数据库出名的海量数据,但是很多时候对于特别大的表就会出现性能问题,特别是当表中有几十个字段,几千条记录的时候,当要查询这样的大表的时候就会卡的很久, 如何优化Oracle 查询大表?

1.优化查询语句

首先,要优化Oracle 查询大表,一定要优化查询语句,尽量让查询语句更加简洁,比如说使用索引、 使用子查询替换多个表之间的SELECT * 合并,减少数据库不必要消费,等等。通过这个方式可以让查询语句更快执行。

下面是一个例子:

原来的查询语句:

SELECT * FROM A, B, C WHERE A.ID=B.ID AND B.ID=C.ID;

优化后的查询语句:

SELECT * FROM A

JOIN B ON A.ID = B.ID

JOIN C ON B.ID = C.ID;

2.建立合适的索引

建立索引是最常用的优化手段,它可以让查询更快更准确。

Oracle推荐通过exists/in这样的条件来建立索引,在首先重新优化查询语句后,可以更好的选择建立哪些索引。

下面是一个例子:

原来的查询语句:

SELECT * FROM TABLE_A

WHERE ID IN (SELECT ID FROM TABLE_B

WHERE AGE =20);

优化后的查询语句:

SELECT * FROM TABLE_A

WHERE EXISTS (SELECT 1 FROM TABLE_B

WHERE AGE =20 and TABLE_A.ID=TABLE_B.ID);

上面这个查询语句优化后,可以加入一个TABLE_B.ID的索引,可以加快查询效率。

3.减少查询表的大小

在优化Oracle查询大表时,也可以通过压缩表大小来减小查询表的大小,最常见的就是使用Partition by Range(分区)把表中的数据按照一定的规则拆分成日期类型的分区,比如每月的数据的按照月份建立分区。这样就可以避免查询整个大表,只是查询特定分区的数据,这样就可以加快查询速度了。

例子:

CREATE TABLE T

(……)

PARTITION BY RANGE(MON_YEAR)

(PARTITION P_JAN2015 VALUES LESS THAN (201501)

,PARTITION P_FEB2015 VALUES LESS THAN (201502)

.

.

.

.

PARTITION P_DEC2015 VALUES LESS THAN (201512));

4.关闭统计信息

Oracle在数据库中会通过对表的统计信息来帮助选择最优的查询计划,然而当数据库规模特别大的时候,统计信息会变的很庞大,在有特别多的查询请求的时候可能会让系统的性能变的较差,这时就可以关闭统计信息了,但是在这之前一定要进行性能测试,因为可能在某些时候统计信息对某种查询也是必须的,关闭统计信息会影响性能。

以上就是如何优化Oracle查询大表的几个基本方法,Oracle数据库包含着海量的数据,优化大表查询会是一件繁重,但又能让数据库跑更快更准确的工作,一定要找到合适的方法来保持一致的性能。


数据运维技术 » 如何优化Oracle查询大表?(oracle查询大表)