Oracle在where子句中添加条件会减慢查询速度

时间:2014-09-08 18:42:52

标签: oracle performance inner-join where cbo

虽然基于少数表格生成报告,其中一些表格非常庞大(超过10亿条记录)而另一些表格非常小​​(100条记录),但需要17分钟。但是我在where子句中添加了一个条件,它开始运行1个多小时。

table1有10亿条记录,添加条件为" line_ind(' Y',' *')"。 问题是当CBO可以从连接的结果集进行搜索时,为什么CBO会进行全表扫描。有序提示似乎没有帮助,因此想知道如何使这个选择运行更快。

这是表格的记录计数

table1(a) 1,234,432,435
table2(b) 1,234,432,435
table3(c) 900
table4(d) 602,364,856
table5(e) 80
table6(f) 50
table7(g) 264,938,373
table8(h) 14,827



SELECT DISTINCT c_cd,
                  ci_nbr,
                  c.s_id1,
                  d.d_cd,
                  SUM (CASE WHEN (D_CD = 'MAILED') THEN 1 ELSE 0 END) AS MAILED
    FROM table1 a
         LEFT OUTER JOIN table2 b ON (a.o_id = b.o_id AND a.co_sid = b.co_sid)
         INNER JOIN table3 c
            ON c.c_sid = a.c_sid AND c.c_cd IN ('CC364', 'CC552')
         INNER JOIN table4 c ON a.sc_sid = c.sc_sid
         INNER JOIN table5 d ON d.d_SID = b.d_SID
         INNER JOIN table6 e ON e.cc_sid = b.cc_sid
         INNER JOIN table7 f ON f.ci_sid = b.ci_sid
         INNER JOIN table8 g ON g.dt_sid = a.dt_sid
GROUP BY dt_cd,
         c_nbr,
         c.s_id1,
         d.d_cd
 where dt_cd in ('c6543-010114','c5653-010514') and line_ind in ('Y', '*') and c_nbr='728246'

解释计划

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                                         | Name                           | E-Rows |E-Bytes| Cost (%CPU)| E-Time   | Pstart| Pstop |    TQ  |IN-OUT| PQ Distrib |
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                                  |                                |    811 |   296K|   304K  (3)| 01:11:02 |       |       |        |      |            |
|   1 |  PX COORDINATOR                                   |                                |        |       |            |          |       |       |        |      |            |
|   2 |   PX SEND QC (RANDOM)                             | :TQ10009                       |    811 |   296K|   304K  (3)| 01:11:02 |       |       |  Q1,09 | P->S | QC (RAND)  |
|   3 |    HASH GROUP BY                                  |                                |    811 |   296K|   304K  (3)| 01:11:02 |       |       |  Q1,09 | PCWP |            |
|   4 |     PX RECEIVE                                    |                                |    811 |   296K|   304K  (3)| 01:11:02 |       |       |  Q1,09 | PCWP |            |
|   5 |      PX SEND HASH                                 | :TQ10008                       |    811 |   296K|   304K  (3)| 01:11:02 |       |       |  Q1,08 | P->P | HASH       |
|   6 |       HASH GROUP BY                               |                                |    811 |   296K|   304K  (3)| 01:11:02 |       |       |  Q1,08 | PCWP |            |
|*  7 |        HASH JOIN                                  |                                |    811 |   296K|   304K  (3)| 01:11:02 |       |       |  Q1,08 | PCWP |            |
|   8 |         PX RECEIVE                                |                                |    802 |   278K|   277K  (4)| 01:04:39 |       |       |  Q1,08 | PCWP |            |
|   9 |          PX SEND BROADCAST                        | :TQ10007                       |    802 |   278K|   277K  (4)| 01:04:39 |       |       |  Q1,07 | P->P | BROADCAST  |
|* 10 |           HASH JOIN                               |                                |    802 |   278K|   277K  (4)| 01:04:39 |       |       |  Q1,07 | PCWP |            |
|  11 |            PX RECEIVE                             |                                |    802 |   177K|   225K  (4)| 00:52:44 |       |       |  Q1,07 | PCWP |            |
|  12 |             PX SEND BROADCAST                     | :TQ10006                       |    802 |   177K|   225K  (4)| 00:52:44 |       |       |  Q1,06 | P->P | BROADCAST  |
|* 13 |              HASH JOIN BUFFERED                   |                                |    802 |   177K|   225K  (4)| 00:52:44 |       |       |  Q1,06 | PCWP |            |
|  14 |               PX RECEIVE                          |                                |     96 |  4800 |     2   (0)| 00:00:01 |       |       |  Q1,06 | PCWP |            |
|  15 |                PX SEND BROADCAST                  | :TQ10004                       |     96 |  4800 |     2   (0)| 00:00:01 |       |       |  Q1,04 | P->P | BROADCAST  |
|  16 |                 PX BLOCK ITERATOR                 |                                |     96 |  4800 |     2   (0)| 00:00:01 |       |       |  Q1,04 | PCWC |            |
|  17 |                  TABLE ACCESS STORAGE FULL        | TABLE5                         |     96 |  4800 |     2   (0)| 00:00:01 |       |       |  Q1,04 | PCWP |            |
|* 18 |               HASH JOIN                           |                                |    802 |   138K|   225K  (4)| 00:52:44 |       |       |  Q1,06 | PCWP |            |
|  19 |                BUFFER SORT                        |                                |        |       |            |          |       |       |  Q1,06 | PCWC |            |
|  20 |                 PX RECEIVE                        |                                |     51 |   561 |     5   (0)| 00:00:01 |       |       |  Q1,06 | PCWP |            |
|  21 |                  PX SEND HASH                     | :TQ10000                       |     51 |   561 |     5   (0)| 00:00:01 |       |       |        | S->P | HASH       |
|  22 |                   TABLE ACCESS STORAGE FULL       | TABLE6                         |     51 |   561 |     5   (0)| 00:00:01 |       |       |        |      |            |
|  23 |                PX RECEIVE                         |                                |    802 |   130K|   225K  (4)| 00:52:44 |       |       |  Q1,06 | PCWP |            |
|  24 |                 PX SEND HASH                      | :TQ10005                       |    802 |   130K|   225K  (4)| 00:52:44 |       |       |  Q1,05 | P->P | HASH       |
|* 25 |                  HASH JOIN                        |                                |    802 |   130K|   225K  (4)| 00:52:44 |       |       |  Q1,05 | PCWP |            |
|  26 |                   PX RECEIVE                      |                                |    802 |   101K|   104K  (5)| 00:24:25 |       |       |  Q1,05 | PCWP |            |
|  27 |                    PX SEND BROADCAST              | :TQ10003                       |    802 |   101K|   104K  (5)| 00:24:25 |       |       |  Q1,03 | P->P | BROADCAST  |
|* 28 |                     HASH JOIN                     |                                |    802 |   101K|   104K  (5)| 00:24:25 |       |       |  Q1,03 | PCWP |            |
|  29 |                      PX RECEIVE                   |                                |      2 |    24 |    17   (0)| 00:00:01 |       |       |  Q1,03 | PCWP |            |
|  30 |                       PX SEND BROADCAST           | :TQ10001                       |      2 |    24 |    17   (0)| 00:00:01 |       |       |  Q1,01 | P->P | BROADCAST  |
|  31 |                        PX BLOCK ITERATOR          |                                |      2 |    24 |    17   (0)| 00:00:01 |       |       |  Q1,01 | PCWC |            |
|* 32 |                         TABLE ACCESS STORAGE FULL | TABLE3                         |      2 |    24 |    17   (0)| 00:00:01 |       |       |  Q1,01 | PCWP |            |
|* 33 |                      HASH JOIN                    |                                |  68190 |  7857K|   104K  (5)| 00:24:25 |       |       |  Q1,03 | PCWP |            |
|  34 |                       PX RECEIVE                  |                                |      2 |    34 |   276   (0)| 00:00:04 |       |       |  Q1,03 | PCWP |            |
|  35 |                        PX SEND BROADCAST          | :TQ10002                       |      2 |    34 |   276   (0)| 00:00:04 |       |       |  Q1,02 | P->P | BROADCAST  |
|  36 |                         PX BLOCK ITERATOR         |                                |      2 |    34 |   276   (0)| 00:00:04 |       |       |  Q1,02 | PCWC |            |
|* 37 |                          TABLE ACCESS STORAGE FULL| TABLE8                         |      2 |    34 |   276   (0)| 00:00:04 |       |       |  Q1,02 | PCWP |            |
|  38 |                       PX BLOCK ITERATOR           |                                |     22M|  2177M|   104K  (5)| 00:24:21 |     1 |1048575|  Q1,03 | PCWC |            |
|* 39 |                        TABLE ACCESS STORAGE FULL  | TABLE1                         |     22M|  2177M|   104K  (5)| 00:24:21 |     1 |1048575|  Q1,03 | PCWP |            |
|  40 |                   PX BLOCK ITERATOR               |                                |    969M|    32G|   121K  (3)| 00:28:15 |     1 |1048575|  Q1,05 | PCWC |            |
|* 41 |                    TABLE ACCESS STORAGE FULL      | TABLE2                         |    969M|    32G|   121K  (3)| 00:28:15 |     1 |1048575|  Q1,05 | PCWP |            |
|  42 |            PX BLOCK ITERATOR                      |                                |    398M|    47G| 50955   (1)| 00:11:54 |       |       |  Q1,07 | PCWC |            |
|  43 |             TABLE ACCESS STORAGE FULL             | TABLE7                         |    398M|    47G| 50955   (1)| 00:11:54 |       |       |  Q1,07 | PCWP |            |
|  44 |         PX BLOCK ITERATOR                         |                                |    589M|    10G| 27170   (2)| 00:06:21 |     1 |    13 |  Q1,08 | PCWC |            |
|  45 |          TABLE ACCESS STORAGE FULL                | TABLE4                         |    589M|    10G| 27170   (2)| 00:06:21 |     1 |    13 |  Q1,08 | PCWP |            |

1 个答案:

答案 0 :(得分:0)

获取两个查询的10053条跟踪。这是Oracle的优化程序跟踪。你会明白为什么oracle会选择不同的计划,你不能错过它。

我认为此链接可以帮助您https://blogs.oracle.com/optimizer/entry/how_do_i_capture_a如果您愿意,可以谷歌获取10053上的其他教程。

相关问题