一次sql查询优化 并行度

速度慢的sql如下:


select sum(f.count) as count,
       f.type_code,
       f.type_name,
       f.parent_type_code,
       '812A462BFCB4445DB5647EE5A9FB04A4' as organ_id,
       '广西桂林市公安局' as organ_name,
       '000-015' as organ_identifier,
       '2016-12-26 00:00:00' as begin_time,
       '2016-12-27 00:00:00' as end_time
  from (select *
          from ((select sum(d.count) as count,
                        d.type_code,
                        d.type_name,
                        d.parent_type_code,
                        d.organ_id,
                        d.organ_name,
                        d.organ_identifier,
                        '2016-12-26 00:00:00' as begin_time,
                        '2016-12-27 00:00:00' as end_time
                   from (select count(a.thr_case_type) as count,
                                a.case_type as type_code,
                                c.type_name as type_name,
                                c.type_parentno as parent_type_code,
                                b.id as organ_id,
                                b.name as organ_name,
                                b.org_identifier as organ_identifier
                           from AIA_T_ALARM_CASE a,
                                AIA_T_DEPARTMENT b,
                                AIA_T_CASE_TYPE  c
                          where 1 = 1
                            and a.belong_area = b.org_gov_code
                            and b.id in
                                ('0FC28EC276C24FC7998590E1B4D8CEF8',
                                 '2327AC9753DC4D93A368AF5554FBDDDA',
                                 '233C5B1A8A934BAE81C36F76866EAA01',
                                 '23EE38F84BCF41FDB9C08AFA1BEC0B3C',
                                 '2DF0DF67636B4515A7B6E0E4BE9F92E6',
                                 '3816947C664242C5A24DC9309EBF6809',
                                 '4C48DF46D0C14C51ADED1C5B23D6C178',
                                 '6942C1ED20AE4ABFB4AFB47A6144B2B4',
                                 '737E67E12AE74094917C04A5D88CE173',
                                 '812A462BFCB4445DB5647EE5A9FB04A4',
                                 '812A462BFCB4445DB5647EE5A9FB04A4-1',
                                 'A4C8E22E22D3473BBF43D48E675CFD2F',
                                 'A6C41069B4A44FCCB608322D31EAF18A',
                                 'A8D88DA6BCC84F92B57A8E136E413FE7',
                                 'BC6E9D5C9E3F48ABBF3D7EF9D0F17D35',
                                 'CDAE94E8E671425FACBD23ED4D1D735F',
                                 'D2D127681C704966AAC30154A2373218',
                                 'DB32EF056BD8418A8205331D7BDEAC15',
                                 'E939C6E3EF1944319EA38EC7F8F98038',
                                 'F85A6834102F4602B5B16B3DAE4FD432',
                                 'FE5817CAEE7D4FACA1555892577D3591')
                            and to_date(to_char(a.case_time,
                                                'yyyy-mm-dd hh24:mi:ss'),
                                        'yyyy-mm-dd hh24:mi:ss') between
                                to_date('2016-12-26 00:00:00',
                                        'yyyy-mm-dd hh24:mi:ss') and
                                to_date('2016-12-27 00:00:00',
                                        'yyyy-mm-dd hh24:mi:ss')
                            and a.case_type = c.type_no
                            and c.type_level = '1'
                          group by a.case_type,
                                   c.type_name,
                                   c.type_parentno,
                                   b.id,
                                   b.name,
                                   b.org_identifier) d
                  group by d.type_code,
                           d.type_name,
                           d.parent_type_code,
                           d.organ_id,
                           d.organ_name,
                           d.organ_identifier) UNION
                (select sum(d.count) as count,
                        d.type_code,
                        d.type_name,
                        d.parent_type_code,
                        d.organ_id,
                        d.organ_name,
                        d.organ_identifier,
                        '2016-12-26 00:00:00' as begin_time,
                        '2016-12-27 00:00:00' as end_time
                   from (select count(a.thr_case_type) as count,
                                a.sub_case_type as type_code,
                                c.type_name as type_name,
                                c.type_parentno as parent_type_code,
                                b.id as organ_id,
                                b.name as organ_name,
                                b.org_identifier as organ_identifier
                           from AIA_T_ALARM_CASE a,
                                AIA_T_DEPARTMENT b,
                                AIA_T_CASE_TYPE  c
                          where 1 = 1
                            and a.belong_area = b.org_gov_code
                            and b.id in
                                ('0FC28EC276C24FC7998590E1B4D8CEF8',
                                 '2327AC9753DC4D93A368AF5554FBDDDA',
                                 '233C5B1A8A934BAE81C36F76866EAA01',
                                 '23EE38F84BCF41FDB9C08AFA1BEC0B3C',
                                 '2DF0DF67636B4515A7B6E0E4BE9F92E6',
                                 '3816947C664242C5A24DC9309EBF6809',
                                 '4C48DF46D0C14C51ADED1C5B23D6C178',
                                 '6942C1ED20AE4ABFB4AFB47A6144B2B4',
                                 '737E67E12AE74094917C04A5D88CE173',
                                 '812A462BFCB4445DB5647EE5A9FB04A4',
                                 '812A462BFCB4445DB5647EE5A9FB04A4-1',
                                 'A4C8E22E22D3473BBF43D48E675CFD2F',
                                 'A6C41069B4A44FCCB608322D31EAF18A',
                                 'A8D88DA6BCC84F92B57A8E136E413FE7',
                                 'BC6E9D5C9E3F48ABBF3D7EF9D0F17D35',
                                 'CDAE94E8E671425FACBD23ED4D1D735F',
                                 'D2D127681C704966AAC30154A2373218',
                                 'DB32EF056BD8418A8205331D7BDEAC15',
                                 'E939C6E3EF1944319EA38EC7F8F98038',
                                 'F85A6834102F4602B5B16B3DAE4FD432',
                                 'FE5817CAEE7D4FACA1555892577D3591')
                            and to_date(to_char(a.case_time,
                                                'yyyy-mm-dd hh24:mi:ss'),
                                        'yyyy-mm-dd hh24:mi:ss') between
                                to_date('2016-12-26 00:00:00',
                                        'yyyy-mm-dd hh24:mi:ss') and
                                to_date('2016-12-27 00:00:00',
                                        'yyyy-mm-dd hh24:mi:ss')
                            and a.sub_case_type = c.type_no
                            and c.type_level = '2'
                          group by a.sub_case_type,
                                   c.type_name,
                                   c.type_parentno,
                                   b.id,
                                   b.name,
                                   b.org_identifier) d
                  group by d.type_code,
                           d.type_name,
                           d.parent_type_code,
                           d.organ_id,
                           d.organ_name,
                           d.organ_identifier) UNION
                (select sum(d.count) as count,
                        d.type_code,
                        d.type_name,
                        d.parent_type_code,
                        d.organ_id,
                        d.organ_name,
                        d.organ_identifier,
                        '2016-12-26 00:00:00' as begin_time,
                        '2016-12-27 00:00:00' as end_time
                   from (select count(a.thr_case_type) as count,
                                a.thr_case_type as type_code,
                                c.type_name as type_name,
                                c.type_parentno as parent_type_code,
                                b.id as organ_id,
                                b.name as organ_name,
                                b.org_identifier as organ_identifier
                           from AIA_T_ALARM_CASE a,
                                AIA_T_DEPARTMENT b,
                                AIA_T_CASE_TYPE  c
                          where 1 = 1
                            and a.belong_area = b.org_gov_code
                            and b.id in
                                ('0FC28EC276C24FC7998590E1B4D8CEF8',
                                 '2327AC9753DC4D93A368AF5554FBDDDA',
                                 '233C5B1A8A934BAE81C36F76866EAA01',
                                 '23EE38F84BCF41FDB9C08AFA1BEC0B3C',
                                 '2DF0DF67636B4515A7B6E0E4BE9F92E6',
                                 '3816947C664242C5A24DC9309EBF6809',
                                 '4C48DF46D0C14C51ADED1C5B23D6C178',
                                 '6942C1ED20AE4ABFB4AFB47A6144B2B4',
                                 '737E67E12AE74094917C04A5D88CE173',
                                 '812A462BFCB4445DB5647EE5A9FB04A4',
                                 '812A462BFCB4445DB5647EE5A9FB04A4-1',
                                 'A4C8E22E22D3473BBF43D48E675CFD2F',
                                 'A6C41069B4A44FCCB608322D31EAF18A',
                                 'A8D88DA6BCC84F92B57A8E136E413FE7',
                                 'BC6E9D5C9E3F48ABBF3D7EF9D0F17D35',
                                 'CDAE94E8E671425FACBD23ED4D1D735F',
                                 'D2D127681C704966AAC30154A2373218',
                                 'DB32EF056BD8418A8205331D7BDEAC15',
                                 'E939C6E3EF1944319EA38EC7F8F98038',
                                 'F85A6834102F4602B5B16B3DAE4FD432',
                                 'FE5817CAEE7D4FACA1555892577D3591')
                            and to_date(to_char(a.case_time,
                                                'yyyy-mm-dd hh24:mi:ss'),
                                        'yyyy-mm-dd hh24:mi:ss') between
                                to_date('2016-12-26 00:00:00',
                                        'yyyy-mm-dd hh24:mi:ss') and
                                to_date('2016-12-27 00:00:00',
                                        'yyyy-mm-dd hh24:mi:ss')
                            and a.thr_case_type = c.type_no
                            and c.type_level = '3'
                          group by a.thr_case_type,
                                   c.type_name,
                                   c.type_parentno,
                                   b.id,
                                   b.name,
                                   b.org_identifier) d
                  group by d.type_code,
                           d.type_name,
                           d.parent_type_code,
                           d.organ_id,
                           d.organ_name,
                           d.organ_identifier)) e
         order by e.type_code) f
 group by f.type_code, f.type_name, f.parent_type_code
 order by f.type_code, f.parent_type_code;


未优化之前 该SQL执行时间约会 10秒








优化方法如下:


关闭数据库直接路径读取 direct path read
alter session set "_small_table_threshold"=9999999 scope=spfile;
ALTER SESSION SET EVENTS '10949 TRACE NAME CONTEXT FOREVER';


新增索引
AIA_T_ALARM_CASE表 case_time列 


alter system set db_keep_cache_size=230m; 修改 keep_pool内存区大小


将这三张表缓存入keep_pool内存区中
alter table AIA_T_ALARM_CASE storage (buffer_pool keep);
alter table AIA_T_DEPARTMENT storage (buffer_pool keep);
alter table AIA_T_CASE_TYPE storage (buffer_pool keep);


增加这三张表的并行度设置为10
alter table AIA_T_ALARM_CASE parallel 10;
alter table AIA_T_DEPARTMENT parallel 10;
alter table AIA_T_CASE_TYPE parallel 10;






经过以上四步优化 该sql执行时间,由为优化之前的10秒.降低为3秒。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值