为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:
【操作系统】:
【CPU】:
【问题描述】*:
sql如下
select * from(select row_.*, rownum rownum_ from (select * from hse_work_ticket where (worktype = 'dz' and worktaskid = '2000000451749' and worktype = 'dz') and tenantId = 2000000002404 order by workticketid asc) row_ where rownum <= 50) where rownum_ > 0;
sql不是写的,而是一些原因自己生成的,所以优化sql 放在最后考虑
执行计划如下
1 #NSET2: [1, 1, 6309]
2 #PRJT2: [1, 1, 6309]; exp_num(208), is_atom(FALSE)
3 #SLCT2: [1, 1, 6309]; DMTEMPVIEW_889907563.ROWNUM_ > var2
4 #PRJT2: [1, 1, 6309]; exp_num(208), is_atom(FALSE)
5 #RN: [1, 1, 6309]
6 #PRJT2: [1, 1, 6309]; exp_num(207), is_atom(FALSE)
7 #SORT3: [1, 1, 6309]; key_num(1), is_distinct(FALSE), top_flag(1), is_adaptive(0)
8 #SLCT2: [1, 1, 6309]; (HSE_WORK_TICKET.WORKTYPE = 'dz' AND HSE_WORK_TICKET.TENANTID = 2000000002404)
9 #BLKUP2: [1, 1, 6309]; I_HSE_WORK_TICKET_WORKTASKID(HSE_WORK_TICKET)
10 #SSEK2: [1, 1, 6309]; scan_type(ASC), I_HSE_WORK_TICKET_WORKTASKID(HSE_WORK_TICKET), scan_range[exp_cast('2000000451749'),exp_cast('2000000451749')]
数据量大概63万
一共三层,从里到外说, 第一层0.x毫秒级, 第二层也没多少大概2ms, 第三层直接到7s 这个是什么原因导致的呢
从执行计划看不像是慢的,先用表所有者账户执行以下命令收集下统计信息,然后再看执行计划
DBMS_STATS.GATHER_TABLE_STATS(USER,'HSE_WORK_TICKET',NULL,100,FALSE,'FOR COLUMNS WORKTYPE,WORKTASKID,TENANTID SIZE AUTO',4);