网友发来语句(如下),问语句有什么问题。这个语句本身没什么问题,关联多次是为了取不同列对应的值。
有了样例表,改写就好办了。
SQL> explain plan for
2 SELECT gcc.segment1,
3 ffv1.DESCRIPTION,
4 gcc.segment3,
5 ffv3.DESCRIPTION,
6 gcc.segment2,
7 ffv2.DESCRIPTION,
8 gcc.segment4,
9 ffv4.DESCRIPTION,
10 gcc.segment5,
11 ffv5.DESCRIPTION,
12 gcc.segment6,
13 ffv6.DESCRIPTION,
14 gcc.segment7,
15 gbb.period_name,
16 gbb.period_net_dr - gbb.period_net_cr b_amount
17 FROM apps.gl_balances gbb,
18 apps.gl_code_combinations gcc,
19 apps.fnd_flex_values_vl ffv1,
20 apps.fnd_flex_values_vl ffv2,
21 apps.fnd_flex_values_vl ffv3,
22 apps.fnd_flex_values_vl ffv4,
23 apps.fnd_flex_values_vl ffv5,
24 apps.fnd_flex_values_vl ffv6,
25 apps.fnd_flex_value_sets ffvs1,
26 apps.fnd_flex_value_sets ffvs2,
27 apps.fnd_flex_value_sets ffvs3,
28 apps.fnd_flex_value_sets ffvs4,
29 apps.fnd_flex_value_sets ffvs5,
30 apps.fnd_flex_value_sets ffvs6
31 WHERE gbb.period_name = '2014-01'
32 /*WHERE gbb.period_name in
33 ('2014-01', '2014-02', '2014-03', '2013-04', '2013-05', '2013-06',
34 '2013-07', '2013-08', '2013-09', '2013-10', '2013-11', '2013-12')*/
35 AND gbb.actual_flag = 'B'
36 AND gbb.template_id IS NULL
37 and gbb.currency_code = 'CNY'
38 and gbb.code_combination_id = gcc.code_combination_id
39 and ffv1.FLEX_VALUE = gcc.segment1
40 and ffv2.FLEX_VALUE = gcc.segment2
41 and ffv3.FLEX_VALUE = gcc.segment3
42 and ffv4.FLEX_VALUE = gcc.segment4
43 and ffv5.FLEX_VALUE = gcc.segment5
44 and ffv6.FLEX_VALUE = gcc.segment6
45 and ffv1.FLEX_VALUE_SET_ID = ffvs1.flex_value_set_id
46 and ffvs1.flex_value_set_name = 'JI_COA_COM'
47 and ffv2.FLEX_VALUE_SET_ID = ffvs2.flex_value_set_id
48 and ffvs2.flex_value_set_name = 'JI_COA_CST'
49 and ffv3.FLEX_VALUE_SET_ID = ffvs3.flex_value_set_id
50 and ffvs3.flex_value_set_name = 'JI_COA_ACC'
51 and ffv4.FLEX_VALUE_SET_ID = ffvs4.flex_value_set_id
52 and ffvs4.flex_value_set_name = 'JI_COA_BRD'
53 and ffv5.FLEX_VALUE_SET_ID = ffvs5.flex_value_set_id
54 and ffvs5.flex_value_set_name = 'JI_COA_PRJ'
55 and ffv6.FLEX_VALUE_SET_ID = ffvs6.flex_value_set_id
56 and ffvs6.flex_value_set_name = 'JI_COA_ICP'
57 and gbb.period_net_dr - gbb.period_net_cr <> 0
58 --and (gcc.segment1 in ('A06510', 'C00060') or gcc.segment1 like 'A6%')
59 --and gcc.segment1 in ('Z00010','Z00020')
60 --and (gcc.segment3 like '660201%'/* or gcc.segment3 like '660205%' or gcc.segment3 like '660207%' */)
61 order by 1, 3
62 ;
Explained.
SQL> set linesize 900 pagesize 900
SQL> select * from table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)|
-----------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 497 | 2138 (1)|
| 1 | SORT ORDER BY | | 1 | 497 | 2138 (1)|
| 2 | NESTED LOOPS | | | | |
| 3 | NESTED LOOPS | | 1 | 497 | 2137 (1)|
| 4 | NESTED LOOPS | | 1 | 474 | 2136 (1)|
| 5 | NESTED LOOPS | | 1 | 454 | 2134 (1)|
| 6 | NESTED LOOPS | | 1 | 431 | 2133 (1)|
| 7 | NESTED LOOPS | | 1 | 411 | 2131 (1)|
| 8 | NESTED LOOPS | | 1 | 388 | 2130 (1)|
| 9 | NESTED LOOPS | | 1 | 368 | 2128 (1)|
| 10 | NESTED LOOPS | | 1 | 345 | 2127 (1)|
| 11 | NESTED LOOPS | | 1 | 325 | 2125 (1)|
| 12 | NESTED LOOPS | | 1 | 302 | 2124 (1)|
|* 13 | HASH JOIN | | 3 | 807 | 2114 (1)|
| 14 | NESTED LOOPS | | | | |
| 15 | NESTED LOOPS | | 1691 | 411K| 2027 (1)|
|* 16 | HASH JOIN | | 48 | 10128 | 267 (3)|
| 17 | TABLE ACCESS FULL | FND_FLEX_VALUES | 31095 | 607K| 86 (2)|
| 18 | NESTED LOOPS | | 31088 | 5798K| 180 (3)|
| 19 | NESTED LOOPS | | 1 | 168 | 7 (0)|
| 20 | NESTED LOOPS | | 1 | 140 | 6 (0)|
| 21 | NESTED LOOPS | | 1 | 112 | 5 (0)|
| 22 | NESTED LOOPS | | 1 | 84 | 4 (0)|
| 23 | NESTED LOOPS | | 1 | 56 | 3 (0)|
| 24 | TABLE ACCESS BY INDEX ROWID| FND_FLEX_VALUE_SETS | 1 | 28 | 2 (0)|
|* 25 | INDEX UNIQUE SCAN | FND_FLEX_VALUE_SETS_U2 | 1 | | 1 (0)|
| 26 | TABLE ACCESS BY INDEX ROWID| FND_FLEX_VALUE_SETS | 1 | 28 | 1 (0)|
|* 27 | INDEX UNIQUE SCAN | FND_FLEX_VALUE_SETS_U2 | 1 | | 0 (0)|
| 28 | TABLE ACCESS BY INDEX ROWID | FND_FLEX_VALUE_SETS | 1 | 28 | 1 (0)|
|* 29 | INDEX UNIQUE SCAN | FND_FLEX_VALUE_SETS_U2 | 1 | | 0 (0)|
| 30 | TABLE ACCESS BY INDEX ROWID | FND_FLEX_VALUE_SETS | 1 | 28 | 1 (0)|
|* 31 | INDEX UNIQUE SCAN | FND_FLEX_VALUE_SETS_U2 | 1 | | 0 (0)|
| 32 | TABLE ACCESS BY INDEX ROWID | FND_FLEX_VALUE_SETS | 1 | 28 | 1 (0)|
|* 33 | INDEX UNIQUE SCAN | FND_FLEX_VALUE_SETS_U2 | 1 | | 0 (0)|
| 34 | TABLE ACCESS BY INDEX ROWID | FND_FLEX_VALUE_SETS | 1 | 28 | 1 (0)|
|* 35 | INDEX UNIQUE SCAN | FND_FLEX_VALUE_SETS_U2 | 1 | | 0 (0)|
|* 36 | TABLE ACCESS FULL | FND_FLEX_VALUES_TL | 31088 | 698K| 173 (3)|
|* 37 | INDEX RANGE SCAN | IDX$$_104F60001 | 370 | | 3 (0)|
| 38 | TABLE ACCESS BY INDEX ROWID | GL_CODE_COMBINATIONS | 36 | 1368 | 352 (0)|
| 39 | TABLE ACCESS FULL | FND_FLEX_VALUES | 31095 | 607K| 86 (2)|
|* 40 | TABLE ACCESS BY INDEX ROWID | GL_BALANCES | 1 | 33 | 4 (0)|
|* 41 | INDEX RANGE SCAN | GL_BALANCES_N1 | 1 | | 2 (0)|
| 42 | TABLE ACCESS BY INDEX ROWID | FND_FLEX_VALUES_TL | 1 | 23 | 1 (0)|
|* 43 | INDEX UNIQUE SCAN | FND_FLEX_VALUES_TL_U1 | 1 | | 0 (0)|
| 44 | TABLE ACCESS BY INDEX ROWID | FND_FLEX_VALUES | 1 | 20 | 2 (0)|
|* 45 | INDEX RANGE SCAN | FND_FLEX_VALUES_N1 | 1 | | 1 (0)|
| 46 | TABLE ACCESS BY INDEX ROWID | FND_FLEX_VALUES_TL | 1 | 23 | 1 (0)|
|* 47 | INDEX UNIQUE SCAN | FND_FLEX_VALUES_TL_U1 | 1 | | 0 (0)|
| 48 | TABLE ACCESS BY INDEX ROWID | FND_FLEX_VALUES | 1 | 20 | 2 (0)|
|* 49 | INDEX RANGE SCAN | FND_FLEX_VALUES_N1 | 1 | | 1 (0)|
| 50 | TABLE ACCESS BY INDEX ROWID | FND_FLEX_VALUES_TL | 1 | 23 | 1 (0)|
|* 51 | INDEX UNIQUE SCAN | FND_FLEX_VALUES_TL_U1 | 1 | | 0 (0)|
| 52 | TABLE ACCESS BY INDEX ROWID | FND_FLEX_VALUES | 1 | 20 | 2 (0)|
|* 53 | INDEX RANGE SCAN | FND_FLEX_VALUES_N1 | 1 | | 1 (0)|
| 54 | TABLE ACCESS BY INDEX ROWID | FND_FLEX_VALUES_TL | 1 | 23 | 1 (0)|
|* 55 | INDEX UNIQUE SCAN | FND_FLEX_VALUES_TL_U1 | 1 | | 0 (0)|
| 56 | TABLE ACCESS BY INDEX ROWID | FND_FLEX_VALUES | 1 | 20 | 2 (0)|
|* 57 | INDEX RANGE SCAN | FND_FLEX_VALUES_N1 | 1 | | 1 (0)|
|* 58 | INDEX UNIQUE SCAN | FND_FLEX_VALUES_TL_U1 | 1 | | 0 (0)|
| 59 | TABLE ACCESS BY INDEX ROWID | FND_FLEX_VALUES_TL | 1 | 23 | 1 (0)|
-----------------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
13 - access("B"."FLEX_VALUE"="GCC"."SEGMENT1" AND "B"."FLEX_VALUE_SET_ID"="FFVS1"."FLEX_VALUE_SET_ID")
16 - access("B"."FLEX_VALUE_SET_ID"="FFVS3"."FLEX_VALUE_SET_ID" AND
"B"."FLEX_VALUE_ID"="T"."FLEX_VALUE_ID")
25 - access("FFVS6"."FLEX_VALUE_SET_NAME"='JI_COA_ICP')
27 - access("FFVS5"."FLEX_VALUE_SET_NAME"='JI_COA_PRJ')
29 - access("FFVS4"."FLEX_VALUE_SET_NAME"='JI_COA_BRD')
31 - access("FFVS3"."FLEX_VALUE_SET_NAME"='JI_COA_ACC')
33 - access("FFVS2"."FLEX_VALUE_SET_NAME"='JI_COA_CST')
35 - access("FFVS1"."FLEX_VALUE_SET_NAME"='JI_COA_COM')
36 - filter("T"."LANGUAGE"=USERENV('LANG'))
37 - access("B"."FLEX_VALUE"="GCC"."SEGMENT3")
40 - filter("GBB"."TEMPLATE_ID" IS NULL AND "GBB"."ACTUAL_FLAG"='B' AND "GBB"."CURRENCY_CODE"='CNY'
AND "GBB"."PERIOD_NET_DR"-"GBB"."PERIOD_NET_CR"<>0)
41 - access("GBB"."CODE_COMBINATION_ID"="GCC"."CODE_COMBINATION_ID" AND "GBB"."PERIOD_NAME"='2014-01')
43 - access("B"."FLEX_VALUE_ID"="T"."FLEX_VALUE_ID" AND "T"."LANGUAGE"=USERENV('LANG'))
45 - access("B"."FLEX_VALUE_SET_ID"="FFVS2"."FLEX_VALUE_SET_ID" AND "B"."FLEX_VALUE"="GCC"."SEGMENT2")
47 - access("B"."FLEX_VALUE_ID"="T"."FLEX_VALUE_ID" AND "T"."LANGUAGE"=USERENV('LANG'))
49 - access("B"."FLEX_VALUE_SET_ID"="FFVS4"."FLEX_VALUE_SET_ID" AND "B"."FLEX_VALUE"="GCC"."SEGMENT4")
51 - access("B"."FLEX_VALUE_ID"="T"."FLEX_VALUE_ID" AND "T"."LANGUAGE"=USERENV('LANG'))
53 - access("B"."FLEX_VALUE_SET_ID"="FFVS5"."FLEX_VALUE_SET_ID" AND "B"."FLEX_VALUE"="GCC"."SEGMENT5")
55 - access("B"."FLEX_VALUE_ID"="T"."FLEX_VALUE_ID" AND "T"."LANGUAGE"=USERENV('LANG'))
57 - access("B"."FLEX_VALUE_SET_ID"="FFVS6"."FLEX_VALUE_SET_ID" AND "B"."FLEX_VALUE"="GCC"."SEGMENT6")
58 - access("B"."FLEX_VALUE_ID"="T"."FLEX_VALUE_ID" AND "T"."LANGUAGE"=USERENV('LANG'))
Note
-----
- 'PLAN_TABLE' is old version
96 rows selected.
问题是网友说这语句很慢,我想起以前另一个网友问过类似的问题。也是这种多次关联大数据,那见改写后没回复。
我问网友要不要试下我那次方法。
确认后开始改写。
因为改写的有点大,为了保证语句要先建立测试用表。
DROP TABLE apps.gl_code_combinations PURGE;
CREATE TABLE apps.gl_code_combinations AS
SELECT 1 AS segment1,
2 AS segment2,
3 AS segment3,
4 AS segment4,
5 AS segment5,
6 AS segment6,
7 AS segment7,
1 AS code_combination_id
FROM dual;
DROP TABLE apps.gl_balances PURGE;
CREATE TABLE apps.gl_balances AS
SELECT 2 AS period_net_dr,
1 AS period_net_cr,
'2014-01' AS period_name,
'B' AS actual_flag,
'CNY' AS currency_code,
1 AS code_combination_id,
1 AS flex_value_set_id,
1 AS template_id
FROM dual;
UPDATE apps.gl_balances SET template_id = NULL;
DROP TABLE apps.fnd_flex_values_vl PURGE;
CREATE TABLE apps.fnd_flex_values_vl AS
SELECT 1 AS flex_value,'a' AS DESCRIPTION,1 AS flex_value_set_id FROM dual UNION ALL
SELECT 2 AS flex_value,'b' AS DESCRIPTION,1 AS flex_value_set_id FROM dual UNION ALL
SELECT 3 AS flex_value,'c' AS DESCRIPTION,1 AS flex_value_set_id FROM dual UNION ALL
SELECT 4 AS flex_value,'d' AS DESCRIPTION,1 AS flex_value_set_id FROM dual UNION ALL
SELECT 5 AS flex_value,'e' AS DESCRIPTION,1 AS flex_value_set_id FROM dual UNION ALL
SELECT 6 AS flex_value,'f' AS DESCRIPTION,1 AS flex_value_set_id FROM dual;
DROP TABLE apps.fnd_flex_value_sets PURGE;
CREATE TABLE apps.fnd_flex_value_sets AS
SELECT 'JI_COA_COM' AS flex_value_set_name,1 AS flex_value_set_id FROM dual UNION ALL
SELECT 'JI_COA_CST' AS flex_value_set_name,1 AS flex_value_set_id FROM dual UNION ALL
SELECT 'JI_COA_ACC' AS flex_value_set_name,1 AS flex_value_set_id FROM dual UNION ALL
SELECT 'JI_COA_BRD' AS flex_value_set_name,1 AS flex_value_set_id FROM dual UNION ALL
SELECT 'JI_COA_PRJ' AS flex_value_set_name,1 AS flex_value_set_id FROM dual UNION ALL
SELECT 'JI_COA_ICP' AS flex_value_set_name,1 AS flex_value_set_id FROM dual;
有了样例表,改写就好办了。
WITH gcc0 AS
(SELECT rownum AS sn,
gcc.segment1,
gcc.segment2,
gcc.segment3,
gcc.segment4,
gcc.segment5,
gcc.segment6,
gcc.segment7,
gbb.period_name,
gbb.period_net_dr - gbb.period_net_cr b_amount
FROM apps.gl_balances gbb, apps.gl_code_combinations gcc
WHERE gbb.period_name = '2014-01'
AND gbb.actual_flag = 'B'
AND gbb.template_id IS NULL
AND gbb.currency_code = 'CNY'
AND gbb.code_combination_id = gcc.code_combination_id
AND gbb.period_net_dr <> gbb.period_net_cr),
gcc AS
(SELECT sn, 'JI_COA_COM' AS flex_value_set_name, segment1 AS segment0, segment7, period_name, b_amount FROM gcc0 UNION ALL
SELECT sn, 'JI_COA_CST' AS flex_value_set_name, segment2 AS segment0, segment7, period_name, b_amount FROM gcc0 UNION ALL
SELECT sn, 'JI_COA_ACC' AS flex_value_set_name, segment3 AS segment0, segment7, period_name, b_amount FROM gcc0 UNION ALL
SELECT sn, 'JI_COA_BRD' AS flex_value_set_name, segment4 AS segment0, segment7, period_name, b_amount FROM gcc0 UNION ALL
SELECT sn, 'JI_COA_PRJ' AS flex_value_set_name, segment5 AS segment0, segment7, period_name, b_amount FROM gcc0 UNION ALL
SELECT sn, 'JI_COA_ICP' AS flex_value_set_name, segment6 AS segment0, segment7, period_name, b_amount FROM gcc0)
SELECT MAX(CASE gcc.flex_value_set_name WHEN 'JI_COA_COM' THEN gcc.segment0 END) AS segment1,
MAX(CASE gcc.flex_value_set_name WHEN 'JI_COA_CST' THEN gcc.segment0 END) AS segment1,
MAX(CASE gcc.flex_value_set_name WHEN 'JI_COA_ACC' THEN gcc.segment0 END) AS segment1,
MAX(CASE gcc.flex_value_set_name WHEN 'JI_COA_BRD' THEN gcc.segment0 END) AS segment1,
MAX(CASE gcc.flex_value_set_name WHEN 'JI_COA_PRJ' THEN gcc.segment0 END) AS segment1,
MAX(CASE gcc.flex_value_set_name WHEN 'JI_COA_ICP' THEN gcc.segment0 END) AS segment1,
MAX(CASE gcc.flex_value_set_name WHEN 'JI_COA_COM' THEN ffv.description END) AS des1,
MAX(CASE gcc.flex_value_set_name WHEN 'JI_COA_CST' THEN ffv.description END) AS des2,
MAX(CASE gcc.flex_value_set_name WHEN 'JI_COA_ACC' THEN ffv.description END) AS des3,
MAX(CASE gcc.flex_value_set_name WHEN 'JI_COA_BRD' THEN ffv.description END) AS des4,
MAX(CASE gcc.flex_value_set_name WHEN 'JI_COA_PRJ' THEN ffv.description END) AS des5,
MAX(CASE gcc.flex_value_set_name WHEN 'JI_COA_ICP' THEN ffv.description END) AS des6,
MAX(gcc.segment7) AS segment7,
MAX(gcc.segment7) AS segment7
FROM gcc, apps.fnd_flex_values_vl ffv, apps.fnd_flex_value_sets ffvs
WHERE ffv.flex_value = gcc.segment0
AND ffv.flex_value_set_id = ffvs.flex_value_set_id
AND ffvs.flex_value_set_name = gcc.flex_value_set_name
GROUP BY gcc.sn
HAVING COUNT (*) = 6
先把固定表数据作了列转行,几个字段放在了同一行中,然后再与view关联一次就够了。
取数据后恢复为一行。改写完时原查询还没执行完(已执行了20分钟了,据说原来要10分钟)。
试下这个改写后的吧。
11:57:28
哇噢~现在飞快啊~
11:57:42
47秒 返回26118行数据
11:57:42
47秒 返回26118行数据
下面是改写后的plan
SQL> select * from table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)|
----------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 4 | 496 | 13314 (1)|
| 1 | TEMP TABLE TRANSFORMATION | | | | |
| 2 | LOAD AS SELECT | FND_FLEX_VALUE_SETS | | | |
| 3 | COUNT | | | | |
|* 4 | HASH JOIN | | 9556 | 662K| 12975 (1)|
|* 5 | TABLE ACCESS BY INDEX ROWID| GL_BALANCES | 9556 | 307K| 9296 (1)|
|* 6 | INDEX RANGE SCAN | GL_BALANCES_N2 | 334K| | 1480 (1)|
| 7 | TABLE ACCESS FULL | GL_CODE_COMBINATIONS | 890K| 32M| 3670 (2)|
|* 8 | FILTER | | | | |
| 9 | HASH GROUP BY | | 4 | 496 | 339 (3)|
| 10 | NESTED LOOPS | | | | |
| 11 | NESTED LOOPS | | 4 | 496 | 338 (2)|
|* 12 | HASH JOIN | | 4 | 404 | 334 (2)|
|* 13 | HASH JOIN | | 31095 | 1457K| 168 (2)|
| 14 | TABLE ACCESS FULL | FND_FLEX_VALUE_SETS | 16637 | 454K| 81 (0)|
| 15 | TABLE ACCESS FULL | FND_FLEX_VALUES | 31095 | 607K| 86 (2)|
| 16 | VIEW | | 57336 | 2967K| 164 (2)|
| 17 | UNION-ALL | | | | |
| 18 | VIEW | | 9556 | 382K| 27 (0)|
| 19 | TABLE ACCESS FULL | SYS_TEMP_0FD9D6621_12726068 | 9556 | 625K| 27 (0)|
| 20 | VIEW | | 9556 | 382K| 27 (0)|
| 21 | TABLE ACCESS FULL | SYS_TEMP_0FD9D6621_12726068 | 9556 | 625K| 27 (0)|
| 22 | VIEW | | 9556 | 382K| 27 (0)|
| 23 | TABLE ACCESS FULL | SYS_TEMP_0FD9D6621_12726068 | 9556 | 625K| 27 (0)|
| 24 | VIEW | | 9556 | 382K| 27 (0)|
| 25 | TABLE ACCESS FULL | SYS_TEMP_0FD9D6621_12726068 | 9556 | 625K| 27 (0)|
| 26 | VIEW | | 9556 | 382K| 27 (0)|
| 27 | TABLE ACCESS FULL | SYS_TEMP_0FD9D6621_12726068 | 9556 | 625K| 27 (0)|
| 28 | VIEW | | 9556 | 382K| 27 (0)|
| 29 | TABLE ACCESS FULL | SYS_TEMP_0FD9D6621_12726068 | 9556 | 625K| 27 (0)|
|* 30 | INDEX UNIQUE SCAN | FND_FLEX_VALUES_TL_U1 | 1 | | 0 (0)|
| 31 | TABLE ACCESS BY INDEX ROWID| FND_FLEX_VALUES_TL | 1 | 23 | 1 (0)|
----------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
4 - access("GBB"."CODE_COMBINATION_ID"="GCC"."CODE_COMBINATION_ID")
5 - filter("GBB"."TEMPLATE_ID" IS NULL AND "GBB"."ACTUAL_FLAG"='B' AND
"GBB"."CURRENCY_CODE"='CNY' AND "GBB"."PERIOD_NET_DR"<>"GBB"."PERIOD_NET_CR")
6 - access("GBB"."PERIOD_NAME"='2014-01')
8 - filter(COUNT(*)=6)
12 - access("B"."FLEX_VALUE"="GCC"."SEGMENT0" AND
"FFVS"."FLEX_VALUE_SET_NAME"="GCC"."FLEX_VALUE_SET_NAME")
13 - access("B"."FLEX_VALUE_SET_ID"="FFVS"."FLEX_VALUE_SET_ID")
30 - access("B"."FLEX_VALUE_ID"="T"."FLEX_VALUE_ID" AND "T"."LANGUAGE"=USERENV('LANG'))
Note
-----
- 'PLAN_TABLE' is old version
54 rows selected.
是不是要清爽些,哈哈
原语句也可以不改写,直接加hint改plan,把nl转为hash