这时候动态采样就可以派上用场了。动态采样可以给在解析时对表中数据进行采样,为优化器器提供准确的估算值(cardinality)。
Exec dbms_stats.delete_table_stats(‘CRM’,’A’);Exec dbms_stats.lock_table_stats(‘CRM’,’A’);
优化后再执行结果秒出。
status in (‘COM’, ‘ERR’) and v1 like ‘10%’
create table t1 aswith v1 as (select /*+ materialize */rownum id from dual connect by level <= 1000)selectrownum id,rpad(rownum, 10, '0') v1,trunc((rownum - 1)/100) n1,casewhen mod(rownum,100000) = 7 then 'ERR'when rownum <= 9990000 then 'COM'when mod(rownum,10) =0 then 'NEW'when mod(rownum,10) between 1 and 5 then 'PRP'when mod(rownum,10) between 6 and 8 then 'FKC'when mod(rownum,10) = 9 then 'LDD'end status,rpad(rownum, 100) paddingfrom v1, v1where rownum <= 1e6;begindbms_stats.gather_table_stats(user,'t1');end;/
selectcount(*)fromt1wherestatus in ('COM', 'ERR')* and v1 like '10%'SQL>COUNT(*)----------11113Execution Plan----------------------------------------------------------Plan hash value: 4096694858-----------------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time|-----------------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 1 | 15 | 4983 (1) | 00:00:01|| 1 | SORT AGGREGATE | | 1 | 15 | |||* 2 | TABLE ACCESS STORAGE FULL| t1 | 395 | 5925 | 4983 (1) | 00:00:01|-----------------------------------------------------------------------------------Predicate Information (identified by operation id):---------------------------------------------------2 - storage("V1" LIKE '10%' AND ("STATUS"='COM' OR "STATUS"='ERR'))filter("V1" LIKE '10%' AND ("STATUS"='COM' OR "STATUS"='ERR'))
SQL> select /*+ OPT_PARAM('OPTIMIZER_DYNAMIC_SAMPLING', 6) */count(*)fromt1wherestatus in ('COM', 'ERR')and v1 like '10%';COUNT(*)----------11113Execution Plan----------------------------------------------------------Plan hash value: 4096694858-----------------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time|-----------------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 1 | 15 | 4983 (1)| 00:00:01|| 1 | SORT AGGREGATE | | 1 | 15 | |||* 2 | TABLE ACCESS STORAGE FULL| t1 | 16595 | 243K | 4983 (1)| 00:00:01|-----------------------------------------------------------------------------------Predicate Information (identified by operation id):---------------------------------------------------2 - storage("V1" LIKE '10%' AND ("STATUS"='COM' OR "STATUS"='ERR'))filter("V1" LIKE '10%' AND ("STATUS"='COM' OR "STATUS"='ERR'))Note------ dynamic statistics used: dynamic sampling (level=6)
文章转载自数据与人,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




