Oracle добавляет условие, в котором предложение замедляет запрос

При создании отчета, основанного на нескольких таблицах, некоторые из которых действительно огромны (более 1 миллиарда записей), а некоторые довольно маленькие (100 записей), это занимает 17 минут. но там, где я добавил условие к предложению where, оно запустилось на 1+ часа.

Таблица1 содержит более 1 миллиарда записей, и добавлено условие "and line_ind in ('Y', '*')". Вопрос заключается в том, почему 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 ответ

Получите 10053 трассировки для обоих запросов. Это трассировка оптимизатора для Oracle. Вы поймете, почему оракул выбирает разные планы, вы не можете пропустить это.

Я думаю, что эта ссылка поможет вам https://blogs.oracle.com/optimizer/entry/how_do_i_capture_a вы можете найти в других учебниках на 10053, если хотите.

Другие вопросы по тегам