-1

对不起我的英语不好。我在 Oracle 10g 上有这么大的数据库。而且我有查询,执行速度很慢。例如,我有查询:115559 行 – 102 秒

执行计划:

Plan hash value: 3664903106

------------------------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                           | Name                | Starts | E-Rows | A-Rows |   A-Time   | Buffers |  OMem |  1Mem | Used-Mem |
------------------------------------------------------------------------------------------------------------------------------------------------
|   1 |  SORT ORDER BY                      |                     |      1 |  30503 |     50 |00:00:09.33 |    3989 |    33M|  2065K|   29M (0)|
|*  2 |   HASH JOIN RIGHT OUTER             |                     |      1 |  30503 |    115K|00:00:05.71 |    3989 |   862K|   862K| 1186K (0)|
|   3 |    INDEX FAST FULL SCAN             | IX2_SLCND           |      1 |   1387 |   1387 |00:00:00.01 |      17 |       |       |          |
|*  4 |    HASH JOIN RIGHT OUTER            |                     |      1 |  30503 |    115K|00:00:05.47 |    3972 |   785K|   785K| 1145K (0)|
|   5 |     TABLE ACCESS FULL               | DISC                |      1 |     90 |     90 |00:00:00.01 |       7 |       |       |          |
|*  6 |     HASH JOIN RIGHT OUTER           |                     |      1 |  30503 |    115K|00:00:05.24 |    3965 |   776K|   776K|  403K (0)|
|   7 |      VIEW                           | index$_join$_030    |      1 |      2 |      2 |00:00:00.01 |       6 |       |       |          |
|*  8 |       HASH JOIN                     |                     |      1 |        |      2 |00:00:00.01 |       6 |   760K|   760K|  464K (0)|
|   9 |        INDEX FAST FULL SCAN         | IX_CMP_NAME         |      1 |      2 |      2 |00:00:00.01 |       3 |       |       |          |
|  10 |        INDEX FAST FULL SCAN         | PK_CMP              |      1 |      2 |      2 |00:00:00.01 |       3 |       |       |          |
|* 11 |      HASH JOIN RIGHT OUTER          |                     |      1 |  30503 |    115K|00:00:05.01 |    3959 |   756K|   756K| 1066K (0)|
|  12 |       TABLE ACCESS FULL             | TTYPE               |      1 |     26 |     27 |00:00:00.01 |       7 |       |       |          |
|* 13 |       HASH JOIN RIGHT OUTER         |                     |      1 |  30503 |    115K|00:00:04.78 |    3952 |   767K|   767K|  416K (0)|
|  14 |        TABLE ACCESS FULL            | COMMTCOMP           |      1 |      2 |      2 |00:00:00.01 |       7 |       |       |          |
|* 15 |        HASH JOIN RIGHT OUTER        |                     |      1 |  30503 |    115K|00:00:04.54 |    3945 |   760K|   760K| 1037K (0)|
|  16 |         TABLE ACCESS FULL           | TTYPE               |      1 |     26 |     27 |00:00:00.01 |       7 |       |       |          |
|* 17 |         HASH JOIN RIGHT OUTER       |                     |      1 |  30503 |    115K|00:00:04.31 |    3938 |   842K|   842K| 1267K (0)|
|  18 |          TABLE ACCESS FULL          | SLRSSEASONTC        |      1 |   2885 |   2974 |00:00:00.01 |      53 |       |       |          |
|* 19 |          HASH JOIN RIGHT OUTER      |                     |      1 |  30503 |    115K|00:00:04.07 |    3885 |   909K|   909K| 1178K (0)|
|  20 |           TABLE ACCESS FULL         | CAR                 |      1 |    976 |    976 |00:00:00.01 |      16 |       |       |          |
|* 21 |           HASH JOIN RIGHT OUTER     |                     |      1 |  30503 |    115K|00:00:03.84 |    3869 |  1036K|  1036K| 1169K (0)|
|  22 |            INDEX FULL SCAN          | PK_STP              |      1 |    258 |    258 |00:00:00.01 |       1 |       |       |          |
|* 23 |            HASH JOIN                |                     |      1 |  30503 |    115K|00:00:03.60 |    3868 |   778K|   778K| 1165K (0)|
|  24 |             TABLE ACCESS FULL       | WKST                |      1 |     83 |     83 |00:00:00.01 |       7 |       |       |          |
|* 25 |             HASH JOIN               |                     |      1 |  61027 |    115K|00:00:03.37 |    3861 |   804K|   804K|  924K (0)|
|  26 |              VIEW                   | index$_join$_014    |      1 |     12 |     12 |00:00:00.01 |       6 |       |       |          |
|* 27 |               HASH JOIN             |                     |      1 |        |     12 |00:00:00.01 |       6 |   783K|   783K|  919K (0)|
|  28 |                INDEX FAST FULL SCAN | IX_BRANCH_NAME      |      1 |     12 |     12 |00:00:00.01 |       3 |       |       |          |
|  29 |                INDEX FAST FULL SCAN | PK_BRANCH           |      1 |     12 |     12 |00:00:00.01 |       3 |       |       |          |
|* 30 |              HASH JOIN              |                     |      1 |  61027 |    115K|00:00:03.13 |    3855 |   808K|   808K| 1166K (0)|
|  31 |               TABLE ACCESS FULL     | USERS               |      1 |     96 |     96 |00:00:00.01 |      16 |       |       |          |
|  32 |               MERGE JOIN            |                     |      1 |    115K|    115K|00:00:02.90 |    3839 |       |       |          |
|* 33 |                HASH JOIN RIGHT OUTER|                     |      1 |    115K|    115K|00:00:02.32 |    3838 |   848K|   848K| 1169K (0)|
|  34 |                 TABLE ACCESS FULL   | STP                 |      1 |    258 |    258 |00:00:00.01 |       7 |       |       |          |
|* 35 |                 HASH JOIN           |                     |      1 |    115K|    115K|00:00:01.95 |    3831 |   848K|   848K| 1169K (0)|
|  36 |                  TABLE ACCESS FULL  | STP                 |      1 |    258 |    258 |00:00:00.01 |       7 |       |       |          |
|* 37 |                  HASH JOIN          |                     |      1 |    115K|    115K|00:00:01.52 |    3824 |   848K|   848K| 1169K (0)|
|  38 |                   TABLE ACCESS FULL | STP                 |      1 |    258 |    258 |00:00:00.01 |       7 |       |       |          |
|* 39 |                   HASH JOIN         |                     |      1 |    115K|    115K|00:00:01.09 |    3817 |    10M|  1956K|   12M (0)|
|* 40 |                    TABLE ACCESS FULL| SL                  |      1 |    116K|    120K|00:00:00.01 |    2115 |       |       |          |
|* 41 |                    TABLE ACCESS FULL| SLTC                |      1 |    114K|    115K|00:00:00.19 |    1702 |       |       |          |
|* 42 |                SORT JOIN            |                     |    115K|      1 |    115K|00:00:00.27 |       1 | 73728 | 73728 |          |
|* 43 |                 INDEX UNIQUE SCAN   | PK_CMP              |      1 |      1 |      1 |00:00:00.01 |       1 |       |       |          |
------------------------------------------------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - access("SLCND"."ID"="SL"."ID")
   4 - access("SL"."DISC_ID"="DISC"."ID")
   6 - access("CARI"."ID"="SLTC"."CARI_ID")
   8 - access(ROWID=ROWID)
  11 - access("TTYPE"."ID"="SLTC"."TTYPE_ID")
  13 - access("CTC"."ID"="SLRSSEASONTC "."ID_COMMTCOMP")
  15 - access("RS"."ID"="SLRSSEASONTC "."COMMTTYPE_ID")
  17 - access("SLRSSEASONTC "."ID"="SLTC"."ID")
  19 - access("CAR"."ID"="SLTC"."CAR_ID")
  21 - access("STP"."ID"="WKST"."DEF_STP_ID")
  23 - access("SL"."POS_WKST_ID"="WKST"."ID")
  25 - access("USERS"."BRANCH_ID"="BRANCH"."ID")
  27 - access(ROWID=ROWID)
  30 - access("SL"."USR_CAS_ID"="USERS"."ID")
  33 - access("SLTC"."THSTP_ID"="THSTP"."ID")
  35 - access("SLTC"."TSTP_ID"="TSTP"."ID")
  37 - access("SLTC"."FSTP_ID"="FSTP"."ID")
  39 - access("SLTC"."ID"="SL"."ID")
  40 - filter(("SL"."WHEN_DATE">=TO_DATE('2001-10-29 00:00:00', 'yyyy-mm-dd hh24:mi:ss') AND "SL"."SCOMP_ID"=1 AND 
              "SL"."WHEN_DATE"<=TO_DATE('2013-10-29 23:59:59', 'yyyy-mm-dd hh24:mi:ss')))
  41 - filter("SLTC"."MANUAL"='N')
  42 - access("SL"."SCOMP_ID"="CMP"."ID")
       filter("SL"."SCOMP_ID"="CMP"."ID")
  43 - access("CMP"."ID"=1)

我需要让 db 更快的想法。感谢您!

ps 我是数据库新手

4

1 回答 1

0

所以,是的,你有一个非常糟糕的执行计划。

为了优化查询,我们还需要查询,但我会尝试仅使用您的执行计划输出给您一些提示。

看到所有的TABLE ACCESS FULL?这通常需要时间!尝试在您的表上使用索引,似乎这里使用的索引太少(可能是因为不存在其他索引)。根据执行计划,以下是一些可能有效的简单索引,您可以尝试一下:

CREATE INDEX ix_sltc_id ON sltc(ID);
CREATE INDEX ix_sl_id ON sl(ID);
CREATE INDEX ix_sltc_manual ON sltc(manual);
CREATE INDEX ix_sl_scomp_id ON sl(SCOMP_ID);
CREATE INDEX ix_sl_pos_wkst_id ON sl(POS_WKST_ID);
CREATE INDEX ix_sltc_thstp_id ON sltc(THSTP_ID)
CREATE INDEX ix_sltc_thstp_id ON sltc(THSTP_ID);
CREATE INDEX ix_sltc_tstp_id ON sltc(TSTP_ID);
CREATE INDEX ix_sltc_fstp_id ON sltc(FSTP_ID);

如果没有查询本身,我们在这里非常有限,可能会丢失大部分图片。使用查询,我们可以尝试创建更有效的复合索引。

更重要的是,您似乎没有在表上使用 PRIMARY KEY,因为在带有谓词“ID”的表上有很多 TABLE ACCESS FULL 操作。确保您的所有“ID”列也被索引(或者如果这确实是主键,则定义为 PRIMARY KEY)。

此外,我们看到优化器没有正确的统计信息,请尝试手动刷新架构的统计信息:

EXEC DBMS_STATS.delete_schema_stats('SCOTT');

作为旁注:无论是谁设计了这个模式,都要对这个人进行数据库设计教育!

更高级读者的另一个旁注:虽然TABLE ACCESS FULL并不总是很糟糕(有很多情况下全表扫描比通过索引访问更快),但它通常表明缺少索引。因此,设置索引和刷新统计信息应该会在此处提供性能提升。

于 2013-11-01T14:22:32.147 回答