2013-12-27一次关于子查询的优化

   一条SQL执行接近两分钟,一看便知子查询非常多,可以先使用调优利器dbms_xplan.display_cursor。

SQL>alter session set statistics_level=all;
SQL>set pagesize 100

SQL>SELECT *
  FROM (SELECT unpaged_.*, rownum rn_
          FROM (select t2.*,
                       (select cs.system_name
                          from cfms_sys cs
                         where cs.sys_id = t2.system_id) as system_name,
                       (select m.name
                          from cfms_module m
                         where m.module_id = t2.module_id) as module_name,
                       (select count(1)
                          from cfms_replys cr
                         where cr.question_id = t2.id) reply_count,
                       (select v.version_no
                          from cfms_versions v
                         where v.version_id = t2.ps_online_version) as ps_online_version_no,
                       (select to_char(wmsys.wm_concat(t.tag_id || ';' ||
                                                       t.name))
                          from cfms_tag t, cfms_tag_question tq
                         where t2.id = tq.question_id
                           and t.tag_id = tq.tag_id) as tags,
                       (select u.name
                          from v_user u
                         where u.user_id = t2.service_id) as service_name,
                       (select max(m.modify_at)
                          from cfms_question_modify m
                         where m.question_id = t2.id) as modify_at,
                       decode((select count(1)
                                from cfms_questions         cq,
                                     cfms_question_workflow cqw,
                                     bpms_ru_todo_task      brtt
                               where cq.id = cqw.question_id
                                 and cqw.process_ins_id =
                                     brtt.cur_process_ins_id
                                 and cq.id = t2.id
                                 and brtt.trans_actor_id =  'N00251.sz'),
                              0,
                              0,
                              1) as can_handle
                  from cfms_questions t2
                 where t2.state <> -1
                   and exists
                 (select 1
                          from cfms_questions         cq,
                               cfms_question_workflow cqw,
                               bpms_ru_todo_task      brtt
                         where cq.id = cqw.question_id
                           and cqw.process_ins_id = brtt.cur_process_ins_id
                           and cq.id = t2.id
                           and brtt.trans_actor_id = 'N00251.sz')
                 order by t2.discover_time desc, t2.id) unpaged_
         WHERE rownum <= 30)
 WHERE rn_ > 20;

已用时间:  00: 01: 53.13

SQL>select * from table(dbms_xplan.display_cursor(null,null,'allstats last'));

    关于下面列的解释,请看http://blog.csdn.net/stevendbaguo/article/details/13776221 ,初步判断子查询次数太多(看Starts便知),很多表都是全表扫描太多次导致。对相应的表加上索引后,有些子查询还是很慢,现在不得不使用神器10046 。

----------------------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                      | Name                   | Starts | E-Rows | A-Rows |   A-Time   | Buffers |  OMem |  1Mem | Used-Mem |
----------------------------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT               |                        |      1 |        |     10 |00:01:59.41 |    2244K|       |       |          |
|   1 |  TABLE ACCESS BY INDEX ROWID   | CFMS_SYS               |      3 |      1 |      3 |00:00:00.01 |       5 |       |       |          |
|*  2 |   INDEX UNIQUE SCAN            | CFMS_SYS_PK            |      3 |      1 |      3 |00:00:00.01 |       2 |       |       |          |
|   3 |  TABLE ACCESS BY INDEX ROWID   | CFMS_MODULE            |      5 |      1 |      4 |00:00:00.01 |       6 |       |       |          |
|*  4 |   INDEX UNIQUE SCAN            | CFMS_MODUL             |      5 |      1 |      4 |00:00:00.01 |       2 |       |       |          |
|   5 |  SORT AGGREGATE                |                        |   4368 |      1 |   4368 |00:00:00.29 |   26208 |       |       |          |
|*  6 |   TABLE ACCESS FULL            | CFMS_REPLYS            |   4368 |      3 |      0 |00:00:00.25 |   26208 |       |       |          |
|*  7 |  TABLE ACCESS FULL             | CFMS_VERSIONS          |      1 |      1 |      0 |00:00:00.01 |       6 |       |       |          |
|   8 |  SORT AGGREGATE                |                        |   4368 |      1 |   4368 |00:00:01.08 |   26208 |       |       |          |
|*  9 |   HASH JOIN                    |                        |   4368 |      5 |      0 |00:00:00.58 |   26208 |   821K|   821K|  221K (0)|
|* 10 |    TABLE ACCESS FULL           | CFMS_TAG_QUESTION      |   4368 |      5 |      0 |00:00:00.19 |   26208 |       |       |          |
|  11 |    TABLE ACCESS FULL           | CFMS_TAG               |      0 |      9 |      0 |00:00:00.01 |       0 |       |       |          |
|  12 |  MAT_VIEW ACCESS BY INDEX ROWID| V_USER                 |      3 |      1 |      2 |00:00:00.01 |       5 |       |       |          |
|* 13 |   INDEX UNIQUE SCAN            | PK_PUB_USER            |      3 |      1 |      2 |00:00:00.01 |       3 |       |       |          |
|  14 |  SORT AGGREGATE                |                        |   4368 |      1 |   4368 |00:00:03.24 |     262K|       |       |          |
|* 15 |   TABLE ACCESS FULL            | CFMS_QUESTION_MODIFY   |   4368 |      1 |   4378 |00:00:03.16 |     262K|       |       |          |
|  16 |  SORT AGGREGATE                |                        |   4368 |      1 |   4368 |00:01:54.25 |    1928K|       |       |          |
|* 17 |   HASH JOIN                    |                        |   4368 |      1 |   4369 |00:01:54.19 |    1928K|   894K|   894K|  381K (0)|
|  18 |    NESTED LOOPS                |                        |   4368 |      1 |   4371 |00:00:03.04 |     268K|       |       |          |
|* 19 |     INDEX UNIQUE SCAN          | CFMS_QUESTIONS         |   4368 |      1 |   4368 |00:00:00.09 |    6304 |       |       |          |
|* 20 |     TABLE ACCESS FULL          | CFMS_QUESTION_WORKFLOW |   4368 |      1 |   4371 |00:00:02.87 |     262K|       |       |          |
|* 21 |    TABLE ACCESS FULL           | BPMS_RU_TODO_TASK      |   4368 |   1424 |     19M|00:00:33.73 |    1659K|       |       |          |
|* 22 |  VIEW                          |                        |      1 |      1 |     10 |00:01:59.41 |    2244K|       |       |          |
|* 23 |   COUNT STOPKEY                |                        |      1 |        |     30 |00:01:59.41 |    2244K|       |       |          |
|  24 |    VIEW                        |                        |      1 |      1 |     30 |00:01:59.41 |    2244K|       |       |          |
|* 25 |     SORT ORDER BY STOPKEY      |                        |      1 |      1 |     30 |00:01:59.41 |    2244K| 80896 | 80896 |71680  (0)|
|* 26 |      HASH JOIN RIGHT SEMI      |                        |      1 |      1 |   4368 |00:00:00.33 |    2065 |  1049K|  1049K| 1413K (0)|
|  27 |       VIEW                     | VW_SQ_1                |      1 |   1424 |   4377 |00:00:00.21 |    1811 |       |       |          |
|  28 |        NESTED LOOPS            |                        |      1 |   1424 |   4377 |00:00:00.19 |    1811 |       |       |          |
|* 29 |         HASH JOIN              |                        |      1 |   1424 |   4377 |00:00:00.11 |     440 |   974K|   974K| 1446K (0)|
|* 30 |          TABLE ACCESS FULL     | BPMS_RU_TODO_TASK      |      1 |   1424 |   4386 |00:00:00.01 |     380 |       |       |          |
|  31 |          TABLE ACCESS FULL     | CFMS_QUESTION_WORKFLOW |      1 |   1674 |   5201 |00:00:00.02 |      60 |       |       |          |
|* 32 |         INDEX UNIQUE SCAN      | CFMS_QUESTIONS         |   4377 |      1 |   4377 |00:00:00.04 |    1371 |       |       |          |
|* 33 |       TABLE ACCESS FULL        | CFMS_QUESTIONS         |      1 |   3774 |   5163 |00:00:00.04 |     254 |       |       |          |
----------------------------------------------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   2 - access("CS"."SYS_ID"=:B1)
   4 - access("M"."MODULE_ID"=:B1)
   6 - filter("CR"."QUESTION_ID"=:B1)
   7 - filter("V"."VERSION_ID"=:B1)
   9 - access("T"."TAG_ID"="TQ"."TAG_ID")
  10 - filter("TQ"."QUESTION_ID"=:B1)
  13 - access("U"."USER_ID"=:B1)
  15 - filter("M"."QUESTION_ID"=:B1)
  17 - access("CQW"."PROCESS_INS_ID"="BRTT"."CUR_PROCESS_INS_ID")
  19 - access("CQ"."ID"=:B1)
  20 - filter("CQW"."QUESTION_ID"=:B1)
  21 - filter("BRTT"."TRANS_ACTOR_ID"='N00251.sz')
  22 - filter("RN_">20)
  23 - filter(ROWNUM<=30)
  25 - filter(ROWNUM<=30)
  26 - access("ITEM_1"="T2"."ID")
  29 - access("CQW"."PROCESS_INS_ID"="BRTT"."CUR_PROCESS_INS_ID")
  30 - filter("BRTT"."TRANS_ACTOR_ID"='N00251.sz')
  32 - access("CQ"."ID"="CQW"."QUESTION_ID")
  33 - filter("T2"."STATE"<>(-1))

10046trace的结果是(如何使用10046请看我以前的blog),通过神器10046一眼就可以看出是对BPMS_RU_TODO_TASK这个子查询查询太多次,表了也有点大

Rows     Row Source Operation
-------  ---------------------------------------------------
      3  TABLE ACCESS BY INDEX ROWID CFMS_SYS (cr=5 pr=0 pw=0 time=156 us cost=1 size=52 card=1)
      3   INDEX UNIQUE SCAN CFMS_SYS_PK (cr=2 pr=0 pw=0 time=70 us cost=0 size=0 card=1)(object id 132684)
      4  TABLE ACCESS BY INDEX ROWID CFMS_MODULE (cr=6 pr=0 pw=0 time=161 us cost=1 size=50 card=1)
      4   INDEX UNIQUE SCAN CFMS_MODUL (cr=2 pr=0 pw=0 time=70 us cost=0 size=0 card=1)(object id 132664)
   4370  SORT AGGREGATE (cr=3 pr=0 pw=0 time=84950 us)
      0   INDEX RANGE SCAN IND_CR_QUESTION_ID (cr=3 pr=0 pw=0 time=48849 us cost=1 size=51 card=3)(object id 134801)
      0  TABLE ACCESS FULL CFMS_VERSIONS (cr=6 pr=0 pw=0 time=85 us cost=3 size=42 card=1)
   4370  SORT AGGREGATE (cr=4370 pr=0 pw=0 time=986114 us)
      0   HASH JOIN  (cr=4370 pr=0 pw=0 time=499642 us cost=7 size=485 card=5)
      0    TABLE ACCESS BY INDEX ROWID CFMS_TAG_QUESTION (cr=4370 pr=0 pw=0 time=128932 us cost=3 size=270 card=5)
      0     INDEX RANGE SCAN IND_TQ_QUESTION_ID (cr=4370 pr=0 pw=0 time=57400 us cost=1 size=0 card=5)(object id 134802)
      0    TABLE ACCESS FULL CFMS_TAG (cr=0 pr=0 pw=0 time=0 us cost=3 size=387 card=9)
      2  MAT_VIEW ACCESS BY INDEX ROWID V_USER (cr=5 pr=0 pw=0 time=137 us cost=2 size=17 card=1)
      2   INDEX UNIQUE SCAN PK_PUB_USER (cr=3 pr=0 pw=0 time=81 us cost=1 size=0 card=1)(object id 134599)
   4370  SORT AGGREGATE (cr=4034 pr=0 pw=0 time=236040 us)
   4380   TABLE ACCESS BY INDEX ROWID CFMS_QUESTION_MODIFY (cr=4034 pr=0 pw=0 time=184813 us cost=4 size=26 card=1)
   4380    INDEX RANGE SCAN IND_QM_QUESTION_ID (cr=1873 pr=0 pw=0 time=72275 us cost=1 size=0 card=3)(object id 134803)
   4370  SORT AGGREGATE (cr=1673138 pr=0 pw=0 time=106229115 us)
   4371   HASH JOIN  (cr=1673138 pr=0 pw=0 time=106172615 us cost=32 size=118 card=1)
   4373    NESTED LOOPS  (cr=16908 pr=0 pw=0 time=294422 us cost=4 size=71 card=1)
   4370     INDEX UNIQUE SCAN CFMS_QUESTIONS (cr=6308 pr=0 pw=0 time=70360 us cost=1 size=17 card=1)(object id 132669)
   4373     TABLE ACCESS BY INDEX ROWID CFMS_QUESTION_WORKFLOW (cr=10600 pr=0 pw=0 time=164442 us cost=3 size=54 card=1)
   4373      INDEX RANGE SCAN IND_QW_QUESTION_ID (cr=6230 pr=0 pw=0 time=59792 us cost=1 size=0 card=1)(object id 134804)
19175560    TABLE ACCESS FULL BPMS_RU_TODO_TASK (cr=1656230 pr=0 pw=0 time=32077237 us cost=27 size=66928 card=1424)
     10  VIEW  (cr=1683632 pr=0 pw=0 time=108051153 us cost=104 size=4407 card=1)
     30   COUNT STOPKEY (cr=1683632 pr=0 pw=0 time=108051028 us)
     30    VIEW  (cr=1683632 pr=0 pw=0 time=108050887 us cost=104 size=4394 card=1)
     30     SORT ORDER BY STOPKEY (cr=1683632 pr=0 pw=0 time=108050758 us cost=104 size=375 card=1)
   4370      HASH JOIN RIGHT SEMI (cr=2065 pr=0 pw=0 time=325742 us cost=103 size=375 card=1)
   4379       VIEW  VW_SQ_1 (cr=1812 pr=0 pw=0 time=206454 us cost=35 size=24208 card=1424)
   4379        NESTED LOOPS  (cr=1812 pr=0 pw=0 time=188877 us cost=35 size=168032 card=1424)
   4379         HASH JOIN  (cr=439 pr=0 pw=0 time=102674 us cost=35 size=143824 card=1424)
   4388          TABLE ACCESS FULL BPMS_RU_TODO_TASK (cr=379 pr=0 pw=0 time=14081 us cost=27 size=66928 card=1424)
   5206          TABLE ACCESS FULL CFMS_QUESTION_WORKFLOW (cr=60 pr=0 pw=0 time=13333 us cost=7 size=90396 card=1674)
   4379         INDEX UNIQUE SCAN CFMS_QUESTIONS (cr=1373 pr=0 pw=0 time=40158 us cost=0 size=17 card=1)(object id 132669)
   5168       TABLE ACCESS FULL CFMS_QUESTIONS (cr=253 pr=0 pw=0 time=42738 us cost=68 size=1351092 card=3774)

定位到了问题就简单了,这是一个分页SQL,降低子查询的次数即可,将子查询提出来,则每次都只执行10次,执行时间立马将下来0.75s。

SQL> SELECT (select cs.system_name
  2            from cfms_sys cs
  3           where cs.sys_id = unpaged.system_id) as system_name,
  4         (select m.name
  5            from cfms_module m
  6           where m.module_id = unpaged.module_id) as module_name,
  7         (select count(1)
  8            from cfms_replys cr
  9           where cr.question_id = unpaged.id) reply_count,
 10         (select v.version_no
 11            from cfms_versions v
 12           where v.version_id = unpaged.ps_online_version) as ps_online_version_no,
 13         (select to_char(wmsys.wm_concat(t.tag_id || ';' || t.name))
 14            from cfms_tag t, cfms_tag_question tq
 15           where unpaged.id = tq.question_id
 16             and t.tag_id = tq.tag_id) as tags,
 17         (select u.name from v_user u where u.user_id = unpaged.service_id) as service_name,
 18         (select max(m.modify_at)
 19            from cfms_question_modify m
 20           where m.question_id = unpaged.id) as modify_at,
 21         decode((select count(1)
 22                  from cfms_questions         cq,
 23                       cfms_question_workflow cqw,
 24                       bpms_ru_todo_task      brtt
 25                 where cq.id = cqw.question_id
 26                   and cqw.process_ins_id = brtt.cur_process_ins_id
 27                   and cq.id = unpaged.id
 28                   and brtt.trans_actor_id = 'N00251.sz'),
 29                0,
 30                0,
 31                1) as can_handle
 32    FROM (SELECT unpaged_.*, rownum rn_
 33            FROM (select t2.*
 34                    from cfms_questions t2
 35                   where t2.state <> -1
 36                     and exists
 37                   (select 1
 38                            from cfms_questions         cq,
 39                                 cfms_question_workflow cqw,
 40                                 bpms_ru_todo_task      brtt
 41                           where cq.id = cqw.question_id
 42                             and cqw.process_ins_id = brtt.cur_process_ins_id
 43                             and cq.id = t2.id
 44                             and brtt.trans_actor_id = 'N00251.sz')
 45                   order by t2.discover_time desc, t2.id) unpaged_
 46           WHERE rownum <= 30) unpaged
 47   WHERE rn_ > 20;
已选择10行。
已用时间:  00: 00: 00.75
执行计划
----------------------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                      | Name                   | Starts | E-Rows | A-Rows |   A-Time   | Buffers |  OMem |  1Mem | Used-Mem |
----------------------------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT               |                        |      1 |        |     10 |00:00:00.31 |    2067 |       |       |          |
|   1 |  TABLE ACCESS BY INDEX ROWID   | CFMS_SYS               |      1 |      1 |      1 |00:00:00.01 |       2 |       |       |          |
|*  2 |   INDEX UNIQUE SCAN            | CFMS_SYS_PK            |      1 |      1 |      1 |00:00:00.01 |       1 |       |       |          |
|   3 |  TABLE ACCESS BY INDEX ROWID   | CFMS_MODULE            |      1 |      1 |      0 |00:00:00.01 |       0 |       |       |          |
|*  4 |   INDEX UNIQUE SCAN            | CFMS_MODUL             |      1 |      1 |      0 |00:00:00.01 |       0 |       |       |          |
|   5 |  SORT AGGREGATE                |                        |     10 |      1 |     10 |00:00:00.01 |       3 |       |       |          |
|*  6 |   INDEX RANGE SCAN             | IND_CR_QUESTION_ID     |     10 |      3 |      0 |00:00:00.01 |       3 |       |       |          |
|*  7 |  TABLE ACCESS FULL             | CFMS_VERSIONS          |      1 |      1 |      0 |00:00:00.01 |       6 |       |       |          |
|   8 |  SORT AGGREGATE                |                        |     10 |      1 |     10 |00:00:00.01 |      10 |       |       |          |
|*  9 |   HASH JOIN                    |                        |     10 |      5 |      0 |00:00:00.01 |      10 |   821K|   821K|  176K (0)|
|  10 |    TABLE ACCESS BY INDEX ROWID | CFMS_TAG_QUESTION      |     10 |      5 |      0 |00:00:00.01 |      10 |       |       |          |
|* 11 |     INDEX RANGE SCAN           | IND_TQ_QUESTION_ID     |     10 |      5 |      0 |00:00:00.01 |      10 |       |       |          |
|  12 |    TABLE ACCESS FULL           | CFMS_TAG               |      0 |      9 |      0 |00:00:00.01 |       0 |       |       |          |
|  13 |  MAT_VIEW ACCESS BY INDEX ROWID| V_USER                 |      1 |      1 |      0 |00:00:00.01 |       0 |       |       |          |
|* 14 |   INDEX UNIQUE SCAN            | PK_PUB_USER            |      1 |      1 |      0 |00:00:00.01 |       0 |       |       |          |
|  15 |  SORT AGGREGATE                |                        |     10 |      1 |     10 |00:00:00.01 |      16 |       |       |          |
|  16 |   TABLE ACCESS BY INDEX ROWID  | CFMS_QUESTION_MODIFY   |     10 |      1 |     10 |00:00:00.01 |      16 |       |       |          |
|* 17 |    INDEX RANGE SCAN            | IND_QM_QUESTION_ID     |     10 |      3 |     10 |00:00:00.01 |       8 |       |       |          |
|  18 |  SORT AGGREGATE                |                        |     10 |      1 |     10 |00:00:00.42 |    3840 |       |       |          |
|* 19 |   HASH JOIN                    |                        |     10 |      1 |     10 |00:00:00.42 |    3840 |   894K|   894K|  384K (0)|
|  20 |    NESTED LOOPS                |                        |     10 |      1 |     10 |00:00:00.01 |      40 |       |       |          |
|* 21 |     INDEX UNIQUE SCAN          | CFMS_QUESTIONS         |     10 |      1 |     10 |00:00:00.01 |      15 |       |       |          |
|  22 |     TABLE ACCESS BY INDEX ROWID| CFMS_QUESTION_WORKFLOW |     10 |      1 |     10 |00:00:00.01 |      25 |       |       |          |
|* 23 |      INDEX RANGE SCAN          | IND_QW_QUESTION_ID     |     10 |      1 |     10 |00:00:00.01 |      15 |       |       |          |
|* 24 |    TABLE ACCESS FULL           | BPMS_RU_TODO_TASK      |     10 |   1424 |  43880 |00:00:00.12 |    3800 |       |       |          |
|* 25 |  VIEW                          |                        |      1 |      1 |     10 |00:00:00.31 |    2067 |       |       |          |
|* 26 |   COUNT STOPKEY                |                        |      1 |        |     30 |00:00:00.31 |    2067 |       |       |          |
|  27 |    VIEW                        |                        |      1 |      1 |     30 |00:00:00.31 |    2067 |       |       |          |
|* 28 |     SORT ORDER BY STOPKEY      |                        |      1 |      1 |     30 |00:00:00.31 |    2067 |  6144 |  6144 | 6144  (0)|
|* 29 |      HASH JOIN RIGHT SEMI      |                        |      1 |      1 |   4370 |00:00:00.30 |    2067 |  1063K|  1063K| 1414K (0)|
|  30 |       VIEW                     | VW_SQ_1                |      1 |   1424 |   4379 |00:00:00.21 |    1813 |       |       |          |
|  31 |        NESTED LOOPS            |                        |      1 |   1424 |   4379 |00:00:00.19 |    1813 |       |       |          |
|* 32 |         HASH JOIN              |                        |      1 |   1424 |   4379 |00:00:00.11 |     440 |   974K|   974K| 1439K (0)|
|* 33 |          TABLE ACCESS FULL     | BPMS_RU_TODO_TASK      |      1 |   1424 |   4388 |00:00:00.01 |     380 |       |       |          |
|  34 |          TABLE ACCESS FULL     | CFMS_QUESTION_WORKFLOW |      1 |   1674 |   5217 |00:00:00.01 |      60 |       |       |          |
|* 35 |         INDEX UNIQUE SCAN      | CFMS_QUESTIONS         |   4379 |      1 |   4379 |00:00:00.04 |    1373 |       |       |          |
|* 36 |       TABLE ACCESS FULL        | CFMS_QUESTIONS         |      1 |   3774 |   5179 |00:00:00.02 |     254 |       |       |          |
----------------------------------------------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   2 - access("CS"."SYS_ID"=:B1)
   4 - access("M"."MODULE_ID"=:B1)
   6 - access("CR"."QUESTION_ID"=:B1)
   7 - filter("V"."VERSION_ID"=:B1)
   9 - access("T"."TAG_ID"="TQ"."TAG_ID")
  11 - access("TQ"."QUESTION_ID"=:B1)
  14 - access("U"."USER_ID"=:B1)
  17 - access("M"."QUESTION_ID"=:B1)
  19 - access("CQW"."PROCESS_INS_ID"="BRTT"."CUR_PROCESS_INS_ID")
  21 - access("CQ"."ID"=:B1)
  23 - access("CQW"."QUESTION_ID"=:B1)
  24 - filter("BRTT"."TRANS_ACTOR_ID"='N00251.sz')
  25 - filter("RN_">20)
  26 - filter(ROWNUM<=30)
  28 - filter(ROWNUM<=30)
  29 - access("ITEM_1"="T2"."ID")
  32 - access("CQW"."PROCESS_INS_ID"="BRTT"."CUR_PROCESS_INS_ID")
  33 - filter("BRTT"."TRANS_ACTOR_ID"='N00251.sz')
  35 - access("CQ"."ID"="CQW"."QUESTION_ID")
  36 - filter("T2"."STATE"<>(-1))

你可能感兴趣的:(2013-12-27一次关于子查询的优化)