我们在工作中经常会遇到某些业务表中的数据量随着系统上线运行时间的增加与日俱增,这些表在上线之初数据量不大,各种SQL语句运行速度也是杠杠的。
但随着数据量多了,表之间的关联效率就开始差强人意了。
很多的开发人员,对ORACLE数据库里面CBO优化器的原理不了解,当SQL跑得慢的时候,总是认为是表没有加索引,结果一个表上胡乱的加上了很多索引,查询效率不见得会提高了,反而影响了insert和update语句的速度。
我们今天模拟一下两个大表之间关联的优化,核心思想是分表。
首先建立两张测试表T1和T2,连续插入数据至每张表的体积达到2G。
create table t1 as select * from dba_objects;
insert into t1 select * from t1;
--连续插入多次,直至达到2G。
--下面的语句是查询表大小的
SELECT SEGMENT_NAME,
SEGMENT_TYPE,
TABLESPACE_NAME,
EXTENTS,
BLOCKS,
BYTES / 1024 / 1024 / 1024 GB
FROM DBA_SEGMENTS
WHERE SEGMENT_NAME = 'T1';
--再将表T1直接复制为T2
create table t2 as select * from t1;