目 录
1.oracle 如何得到一个很大的表.........................................................3
2. loop insert 实例 .........................................................................5
3. autotrace 验证索引的性能到底有多大? ..........................................6
4. EXPLAIN 验证 SQL 是否走索引 ......................................................8
5. 结合 autotrace 创建并验证函数索引 ...............................................8
6. sql trace 分析工具——TKPROF 详细讲解........................................ 11
7. V$SQL 视图详解加几个实例........................................................ 15
8. autotrace 验证压缩表性能 .......................................................... 17
9. AUTOTRACE 验证消除子查询后的性能 .......................................... 20
10. 基于成本的优化 CBO ............................................................... 23
11. 如何统计数据库数据 ............................................................... 26
12. oracle 如何统计操作系统数据 .................................................... 28
13. /*+parallel(t,4)*/在大表查询性能的体现 ..................................... 29
14. CRAS 和 create insert 的性能测试 ............................................... 30
15. 增加字段时指定 default 值和先增加再 update 哪个性能好? ............. 31
16. 分区表实例讲解 ..................................................................... 33
17. 分区索引实例讲解 .................................................................. 39
18. 分区表管理实例,以及常见的错误 .............................................. 40
1.oracle 如何得到一个很大的表
在 Oracle 默认的数据库中最大的系统表非 dba_objects 莫属了。
我们可以利用 CTAS 这个表来创建一个很大的表。很快就可以得到几千万的数据量,对测试
提供了很好的环境。
还有一种就是笛卡尔积这个表,得到的数据惊人。
SQL> create table awen.ob_bak as select * from dba_objects;
表已创建。
SQL> select count(*) from awen.ob_bak;
COUNT(*)
----------
50429
SQL> insert into awen.ob_bak select * from dba_objects;
已创建 50428 行。
SQL> insert into awen.ob_bak select * from dba_objects;
已创建 50428 行。
SQL> insert into awen.ob_bak select * from dba_objects;
已创建 50428 行。
SQL> insert into awen.ob_bak select * from dba_objects;
已创建 50428 行。
SQL> insert into awen.ob_bak select * from dba_objects;
已创建 50428 行。
SQL> insert into awen.ob_bak select * from dba_objects;
已创建 50428 行。
SQL> /
已创建 50428 行。
SQL> /
已创建 50428 行。
SQL> /
已创建 50428 行。
SQL> /
已创建 50428 行。
SQL> /
已创建 50428 行。
SQL> insert into awen.ob_bak select * from awen.ob_bak;
已创建 605137 行。
SQL> insert into awen.ob_bak select * from awen.ob_bak;
已创建 1210274 行。
SQL> insert into awen.ob_bak select * from awen.ob_bak;
已创建 2420548 行。
SQL> insert into awen.ob_bak select * from awen.ob_bak;
已创建 4841096 行。
SQL> /
已创建 9682192 行。
SQL> select count(*) from awen.ob_bak;
COUNT(*)
----------
19364384
还有一种就是笛卡尔积,这种可以翻倍增长。
还有下面用 PL/SQL 也可以实现。
2. loop insert 实例
下面是一个简单的 loop insert 的实例。
SQL> desc over_com;
名称 是否为空? 类型
----------------------------------------- -------- ---------------------------
-
ID NUMBER(9)
SQL> select * from over_com;
ID
----------
1
1
1
1
1
1
1
1
1
1
已选择 10 行。
SQL> begin
2 for i in 1 .. 1000000
3 loop
4 insert into over_com values(i);
5 end loop;
6 end;
7 /
PL/SQL 过程已成功完成。
SQL> select count(*) from over_com;
COUNT(*)
----------
1000010