为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】: 1-3-62-2023.11.09-208042-20067-ENT
【操作系统】:
Release:
Kylin Linux Advanced Server release V10 (Tercel)
Kernel:
4.19.90-23.8.v2101.ky10.aarch64
Build:
Kylin Linux Advanced Server
release V10 (SP1) /(Tercel)-aarch64-Build20/20210518
【CPU】: Kunpeng-920
【问题描述】*:想要撰写一个开启trace后,SQL执行计划结果集包含"->"的例子。可在实操后,发现trace执行计划的结果集依然还是CBO预估的数字。
--先创建了一张表
create table TEST_20240222_1
(
c1 number(28,0),
c2 varchar(100)
);
--然后插入数据
BEGIN
for T in 1..10000
loop
insert into TEST_20240222_1 values( T, repeatstr('ttt',3));
if T MOD 100 =0 then
commit;
end if;
end loop;
commit;
end;
--在未收集统计信息的情况下查看执行计划
SQL> explain select * from TEST_20240222_1 where C2 = 'ttttttttt';
1 #NSET2: [1, 250, 90]
2 #PRJT2: [1, 250, 90]; exp_num(3), is_atom(FALSE)
3 #SLCT2: [1, 250, 90]; TEST_20240222_1.C2 = 'ttttttttt' SLCT_PUSHDOWN(TRUE)
4 #CSCN2: [1, 10000, 90]; INDEX33574604(TEST_20240222_1) NEED_SLCT(TRUE)
--然后开启trace,试图查看真实的执行计划,结果如下图
开启sql监控参数
sf_set_session_para_value('MONITOR_SQL_EXEC',1);
之后set autotrace trace
你收集统计信息了吗?我这边收集完查看是没问题的


dbms_stats.gather_table_stats('SYSDBA','TEST_20240222_1');