如果原始 SQL 执行时间很长(例如 3 分钟,或者 30 分钟也没跑完),优化过程
可能会很耗时。有没有什么加快优化过程的技巧呢?
让我们构造 1 个例子来说明如何做。
第一步,创建 4 个表
create table tu as select * from dba_objects;
create table tv as select * from dba_objects;
create table tw as select * from dba_objects;
create table tt as select * from dba_objects;
第二步,收集统计资料
exec dbms_stats.gather_table_stats(
ownname=>'TOSSKA',
tabname=>'TU',
estimate_percent=>dbms_stats.auto_sample_size);
exec dbms_stats.gather_table_stats(
ownname=>'TOSSKA',
tabname=>'TV',
estimate_percent=>dbms_stats.auto_sample_size);
exec dbms_stats.gather_table_stats(
ownname=>'TOSSKA',
tabname=>'TW',
estimate_percent=>dbms_stats.auto_sample_size);
exec dbms_stats.gather_table_stats(
ownname=>'TOSSKA',
tabname=>'TT',
estimate_percent=>dbms_stats.auto_sample_size);
第三步,准备原始 SQL (我在 SQL*Plus 中测试过,3 分钟没跑完,于是杀掉了)
SELECT /*+ use_hash(w u v t) */ COUNT(*)
FROM tv v,
tu u,
tw w,
tt t
评论