大牛们帮忙看看,这两个SQL哪个执行效率高,serv_type_num不是索引
SQL> explain plan for select USR_NUMBER,
2 MIN(BRAND_CD) BRAND_CD,
3 SUM(case when A.ROAM_TYPE_NUM=0 then A.CALL_NUM else 0 END)
4 SUM(case when A.ROAM_TYPE_NUM=0 then A.CALL_TIM else 0 END)
5 SUM(case when A.toll_type_num=10 then A.CALL_TIM else 0 END)
6 SUM(case when A.toll_type_num=11 then A.CALL_TIM else 0 END)
7 SUM(case when A.ROAM_TYPE_NUM=8 then A.CALL_TIM else 0 END)
8 SUM(case when A.ROAM_TYPE_NUM=9 then A.CALL_TIM else 0 END)
9 from AAAAA_201211 A
10 where substr(serv_type_num,1,1)='0'
11 and DIRE_TYP_NUM IN ('3','4')
12 and BRAND_CD in (6,7,8)
13 GROUP BY USR_NUMBER;
Explained.Elapsed: 00:00:00.01
SQL> select * from table(dbms_xplan.display);PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------------------------
Plan hash value: 1605481476------------------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib |
------------------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1022K| 32M| | 28638 (6)| 00:08:36 | | | |
| 1 | PX COORDINATOR | | | | | | | | | |
| 2 | PX SEND QC (RANDOM) | :TQ10001 | 1022K| 32M| | 28638 (6)| 00:08:36 | Q1,01 | P->S | QC (RAND) |
| 3 | SORT GROUP BY | | 1022K| 32M| 111M| 28638 (6)| 00:08:36 | Q1,01 | PCWP | |
| 4 | PX RECEIVE | | 1066K| 33M| | 28634 (6)| 00:08:36 | Q1,01 | PCWP | |
| 5 | PX SEND HASH | :TQ10000 | 1066K| 33M| | 28634 (6)| 00:08:36 | Q1,00 | P->P | HASH |
| 6 | PX BLOCK ITERATOR | | 1066K| 33M| | 28634 (6)| 00:08:36 | Q1,00 | PCWC | |
|* 7 | TABLE ACCESS FULL| AAAAA_201211 | 1066K| 33M| | 28634 (6)| 00:08:36 | Q1,00 | PCWP | |Predicate Information (identified by operation id):
--------------------------------------------------- 7 - filter(("DIRE_TYPE_NUM"='3' OR "DIRE_TYPE_NUM"='4') AND SUBSTR("SERV_TYP_NUM",1,1)='0' AND ("BRAND_CD"=6 OR "BRAND_CD"=7 OR
"BRAND_CD"=8))
20 rows selected.Elapsed: 00:00:00.03
SQL> explain plan for select USR_NUMBER,
2 MIN(BRAND_CD) BRAND_CD,
3 SUM(case when A.ROAM_TYPE_NUM=0 then A.CALL_NUM else 0 END)
4 SUM(case when A.ROAM_TYPE_NUM=0 then A.CALL_TIM else 0 END)
5 SUM(case when A.toll_type_num=10 then A.CALL_TIM else 0 END)
6 SUM(case when A.toll_type_num=11 then A.CALL_TIM else 0 END)
7 SUM(case when A.ROAM_TYPE_NUM=8 then A.CALL_TIM else 0 END)
8 SUM(case when A.ROAM_TYPE_NUM=9 then A.CALL_TIM else 0 END)
9 from AAAAA_201211 A
10 where serv_type_num LIKE '0%'
11 and DIRE_TYP_NUM IN ('3','4')
12 and BRAND_CD BETWEEN 6 AND 8
13 GROUP BY USR_NUMBER;
Explained.Elapsed: 00:00:00.01
SQL> select * from table(dbms_xplan.display);PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------------------------
Plan hash value: 1605481476------------------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib |
------------------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 7808K| 245M| | 28642 (6)| 00:08:36 | | | |
| 1 | PX COORDINATOR | | | | | | | | | |
| 2 | PX SEND QC (RANDOM) | :TQ10001 | 7808K| 245M| | 28642 (6)| 00:08:36 | Q1,01 | P->S | QC (RAND) |
| 3 | SORT GROUP BY | | 7808K| 245M| 1077M| 28642 (6)| 00:08:36 | Q1,01 | PCWP | |
| 4 | PX RECEIVE | | 12M| 388M| | 28602 (6)| 00:08:35 | Q1,01 | PCWP | |
| 5 | PX SEND HASH | :TQ10000 | 12M| 388M| | 28602 (6)| 00:08:35 | Q1,00 | P->P | HASH |
| 6 | PX BLOCK ITERATOR | | 12M| 388M| | 28602 (6)| 00:08:35 | Q1,00 | PCWC | |
|* 7 | TABLE ACCESS FULL| AAAAA_201211 | 12M| 388M| | 28602 (6)| 00:08:35 | Q1,00 | PCWP | |
------------------------------------------------------------------------------------------------------------------------------Predicate Information (identified by operation id):
--------------------------------------------------- 7 - filter("SERV_TYPE_NUM" LIKE '0%' AND ("DIRE_TYP_NUM"='3' OR "DIRE_TYPE_NUM"='4') AND "BRAND_CD"<=8 AND "BRAND_CD">=6)19 rows selected.Elapsed: 00:00:00.03
SQL> explain plan for select USR_NUMBER,
2 MIN(BRAND_CD) BRAND_CD,
3 SUM(case when A.ROAM_TYPE_NUM=0 then A.CALL_NUM else 0 END)
4 SUM(case when A.ROAM_TYPE_NUM=0 then A.CALL_TIM else 0 END)
5 SUM(case when A.toll_type_num=10 then A.CALL_TIM else 0 END)
6 SUM(case when A.toll_type_num=11 then A.CALL_TIM else 0 END)
7 SUM(case when A.ROAM_TYPE_NUM=8 then A.CALL_TIM else 0 END)
8 SUM(case when A.ROAM_TYPE_NUM=9 then A.CALL_TIM else 0 END)
9 from AAAAA_201211 A
10 where substr(serv_type_num,1,1)='0'
11 and DIRE_TYP_NUM IN ('3','4')
12 and BRAND_CD in (6,7,8)
13 GROUP BY USR_NUMBER;
Explained.Elapsed: 00:00:00.01
SQL> select * from table(dbms_xplan.display);PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------------------------
Plan hash value: 1605481476------------------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib |
------------------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1022K| 32M| | 28638 (6)| 00:08:36 | | | |
| 1 | PX COORDINATOR | | | | | | | | | |
| 2 | PX SEND QC (RANDOM) | :TQ10001 | 1022K| 32M| | 28638 (6)| 00:08:36 | Q1,01 | P->S | QC (RAND) |
| 3 | SORT GROUP BY | | 1022K| 32M| 111M| 28638 (6)| 00:08:36 | Q1,01 | PCWP | |
| 4 | PX RECEIVE | | 1066K| 33M| | 28634 (6)| 00:08:36 | Q1,01 | PCWP | |
| 5 | PX SEND HASH | :TQ10000 | 1066K| 33M| | 28634 (6)| 00:08:36 | Q1,00 | P->P | HASH |
| 6 | PX BLOCK ITERATOR | | 1066K| 33M| | 28634 (6)| 00:08:36 | Q1,00 | PCWC | |
|* 7 | TABLE ACCESS FULL| AAAAA_201211 | 1066K| 33M| | 28634 (6)| 00:08:36 | Q1,00 | PCWP | |Predicate Information (identified by operation id):
--------------------------------------------------- 7 - filter(("DIRE_TYPE_NUM"='3' OR "DIRE_TYPE_NUM"='4') AND SUBSTR("SERV_TYP_NUM",1,1)='0' AND ("BRAND_CD"=6 OR "BRAND_CD"=7 OR
"BRAND_CD"=8))
20 rows selected.Elapsed: 00:00:00.03
SQL> explain plan for select USR_NUMBER,
2 MIN(BRAND_CD) BRAND_CD,
3 SUM(case when A.ROAM_TYPE_NUM=0 then A.CALL_NUM else 0 END)
4 SUM(case when A.ROAM_TYPE_NUM=0 then A.CALL_TIM else 0 END)
5 SUM(case when A.toll_type_num=10 then A.CALL_TIM else 0 END)
6 SUM(case when A.toll_type_num=11 then A.CALL_TIM else 0 END)
7 SUM(case when A.ROAM_TYPE_NUM=8 then A.CALL_TIM else 0 END)
8 SUM(case when A.ROAM_TYPE_NUM=9 then A.CALL_TIM else 0 END)
9 from AAAAA_201211 A
10 where serv_type_num LIKE '0%'
11 and DIRE_TYP_NUM IN ('3','4')
12 and BRAND_CD BETWEEN 6 AND 8
13 GROUP BY USR_NUMBER;
Explained.Elapsed: 00:00:00.01
SQL> select * from table(dbms_xplan.display);PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------------------------
Plan hash value: 1605481476------------------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib |
------------------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 7808K| 245M| | 28642 (6)| 00:08:36 | | | |
| 1 | PX COORDINATOR | | | | | | | | | |
| 2 | PX SEND QC (RANDOM) | :TQ10001 | 7808K| 245M| | 28642 (6)| 00:08:36 | Q1,01 | P->S | QC (RAND) |
| 3 | SORT GROUP BY | | 7808K| 245M| 1077M| 28642 (6)| 00:08:36 | Q1,01 | PCWP | |
| 4 | PX RECEIVE | | 12M| 388M| | 28602 (6)| 00:08:35 | Q1,01 | PCWP | |
| 5 | PX SEND HASH | :TQ10000 | 12M| 388M| | 28602 (6)| 00:08:35 | Q1,00 | P->P | HASH |
| 6 | PX BLOCK ITERATOR | | 12M| 388M| | 28602 (6)| 00:08:35 | Q1,00 | PCWC | |
|* 7 | TABLE ACCESS FULL| AAAAA_201211 | 12M| 388M| | 28602 (6)| 00:08:35 | Q1,00 | PCWP | |
------------------------------------------------------------------------------------------------------------------------------Predicate Information (identified by operation id):
--------------------------------------------------- 7 - filter("SERV_TYPE_NUM" LIKE '0%' AND ("DIRE_TYP_NUM"='3' OR "DIRE_TYPE_NUM"='4') AND "BRAND_CD"<=8 AND "BRAND_CD">=6)19 rows selected.Elapsed: 00:00:00.03
如果有索引,sql2可能会走索引,效率会高。sql1除非建立函数索引,否则全表扫描了。