ORACLE db 在更新特定 table 时变得非常非常慢

ORACLE db become very very slow while updating the particular table

我们公司的数据库有一个名为 "TEMP_EMP_ATTENDANCE" 的 table。这次大约有600000多条记录,并且系统每天添加大约3500条记录用于员工考勤记录。因此,当我们进行出勤计算过程时,整个数据库和应用程序变得太慢,每个班次需要大约 2.5 到 3 小时。我们可以做些什么来加快处理速度?

TABLE 描述:

CREATE TABLE SYSTEM.TEMP_EMP_ATTENDANCE (
  CM_CODE NUMBER(2, 0) NOT NULL,
  EAE_MONTH NUMBER(2, 0) NOT NULL,
  EAE_YEAR NUMBER(4, 0) NOT NULL,
  EAE_EM_ID NUMBER(8, 0) NOT NULL,
  EAE_EMP_ID VARCHAR2(50 BYTE),
  EAE_REG_NO VARCHAR2(6 BYTE),
  EM_NAME VARCHAR2(100 BYTE),
  EAE_DATE TIMESTAMP(6) NOT NULL,
  EM_TYPE_CODE NUMBER(4, 0),
  EG_ID NUMBER(4, 0),
  PH_CODE NUMBER(4, 0),
  DEPT_CODE NUMBER(4, 0),
  SUBDEPT_CODE NUMBER(4, 0),
  SHIFT_ID NUMBER(4, 0),
  SCH_INTIME TIMESTAMP(6),
  SCH_OUTTIME TIMESTAMP(6),
  IN_TIME TIMESTAMP(6),
  OUT_TIME TIMESTAMP(6),
  DAY NUMBER(5, 2),
  LATE_TIME NUMBER(15, 2),
  OVER_TIME NUMBER(15, 2),
  EAE_EM_RESTDAY VARCHAR2(10 BYTE),
  DAILY_STATUS VARCHAR2(30 BYTE),
  LTM_CODE NUMBER(4, 0),
  BMANUALUPDATEINOUTTIME NUMBER(1, 0),
  TOTAL_PUNCH NUMBER(3, 0),
  REMARK VARCHAR2(1000 BYTE),REMARK VARCHAR2(1000 BYTE),
  WORK_HOURS NUMBER(4, 2),REMARK VARCHAR2(1000 BYTE),
  WORK_HOURS NUMBER(4, 2),
  ENT_DATE DATE,REMARK VARCHAR2(1000 BYTE),
  WORK_HOURS NUMBER(4, 2),
  ENT_DATE DATE,
  USER_ID NUMBER(8, 0),REMARK VARCHAR2(1000 BYTE),
  WORK_HOURS NUMBER(4, 2),
  ENT_DATE DATE,
  USER_ID NUMBER(8, 0),
  DM_ID NUMBER(4, 0),REMARK VARCHAR2(1000 BYTE),
  WORK_HOURS NUMBER(4, 2),
  ENT_DATE DATE,
  USER_ID NUMBER(8, 0),
  DM_ID NUMBER(4, 0),
  LATE_GOING NUMBER(15, 2),REMARK VARCHAR2(1000 BYTE),
  WORK_HOURS NUMBER(4, 2),
  ENT_DATE DATE,
  USER_ID NUMBER(8, 0),
  DM_ID NUMBER(4, 0),
  LATE_GOING NUMBER(15, 2),
  DAY_STATUS VARCHAR2(1 BYTE),REMARK VARCHAR2(1000 BYTE),
  WORK_HOURS NUMBER(4, 2),
  ENT_DATE DATE,
  USER_ID NUMBER(8, 0),
  DM_ID NUMBER(4, 0),
  LATE_GOING NUMBER(15, 2),
  DAY_STATUS VARCHAR2(1 BYTE),
  CONSTRAINT TEMP_EMP_ATTENDANCE_O_PK PRIMARY KEY (CM_CODE, EAE_EM_ID, EAE_DATE, EAE_MONTH, EAE_YEAR) USING INDEX TABLESPACE SYSTEM STORAGE ( INITIAL 64K MAXEXTENTS UNLIMITED ))REMARK VARCHAR2(1000 BYTE),
  WORK_HOURS NUMBER(4, 2),
  ENT_DATE DATE,
  USER_ID NUMBER(8, 0),
  DM_ID NUMBER(4, 0),
  LATE_GOING NUMBER(15, 2),
  DAY_STATUS VARCHAR2(1 BYTE),
  CONSTRAINT TEMP_EMP_ATTENDANCE_O_PK PRIMARY KEY (CM_CODE, EAE_EM_ID, EAE_DATE, EAE_MONTH, EAE_YEAR) USING INDEX TABLESPACE SYSTEM STORAGE ( INITIAL 64K MAXEXTENTS UNLIMITED ))
TABLESPACE SYSTEMREMARK VARCHAR2(1000 BYTE),
  WORK_HOURS NUMBER(4, 2),
  ENT_DATE DATE,
  USER_ID NUMBER(8, 0),
  DM_ID NUMBER(4, 0),
  LATE_GOING NUMBER(15, 2),
  DAY_STATUS VARCHAR2(1 BYTE),
  CONSTRAINT TEMP_EMP_ATTENDANCE_O_PK PRIMARY KEY (CM_CODE, EAE_EM_ID, EAE_DATE, EAE_MONTH, EAE_YEAR) USING INDEX TABLESPACE SYSTEM STORAGE ( INITIAL 64K MAXEXTENTS UNLIMITED ))
TABLESPACE SYSTEM
STORAGE (REMARK VARCHAR2(1000 BYTE),
  WORK_HOURS NUMBER(4, 2),
  ENT_DATE DATE,
  USER_ID NUMBER(8, 0),
  DM_ID NUMBER(4, 0),
  LATE_GOING NUMBER(15, 2),
  DAY_STATUS VARCHAR2(1 BYTE),
  CONSTRAINT TEMP_EMP_ATTENDANCE_O_PK PRIMARY KEY (CM_CODE, EAE_EM_ID, EAE_DATE, EAE_MONTH, EAE_YEAR) USING INDEX TABLESPACE SYSTEM STORAGE ( INITIAL 64K MAXEXTENTS UNLIMITED ))
TABLESPACE SYSTEM
STORAGE (
  INITIAL 64KREMARK VARCHAR2(1000 BYTE),
  WORK_HOURS NUMBER(4, 2),
  ENT_DATE DATE,
  USER_ID NUMBER(8, 0),
  DM_ID NUMBER(4, 0),
  LATE_GOING NUMBER(15, 2),
  DAY_STATUS VARCHAR2(1 BYTE),
  CONSTRAINT TEMP_EMP_ATTENDANCE_O_PK PRIMARY KEY (CM_CODE, EAE_EM_ID, EAE_DATE, EAE_MONTH, EAE_YEAR) USING INDEX TABLESPACE SYSTEM STORAGE ( INITIAL 64K MAXEXTENTS UNLIMITED ))
TABLESPACE SYSTEM
STORAGE (
  INITIAL 64K
  MAXEXTENTS UNLIMITEDREMARK VARCHAR2(1000 BYTE),
  WORK_HOURS NUMBER(4, 2),
  ENT_DATE DATE,
  USER_ID NUMBER(8, 0),
  DM_ID NUMBER(4, 0),
  LATE_GOING NUMBER(15, 2),
  DAY_STATUS VARCHAR2(1 BYTE),
  CONSTRAINT TEMP_EMP_ATTENDANCE_O_PK PRIMARY KEY (CM_CODE, EAE_EM_ID, EAE_DATE, EAE_MONTH, EAE_YEAR) USING INDEX TABLESPACE SYSTEM STORAGE ( INITIAL 64K MAXEXTENTS UNLIMITED ))
TABLESPACE SYSTEM
STORAGE (
  INITIAL 64K
  MAXEXTENTS UNLIMITED
)REMARK VARCHAR2(1000 BYTE),
  WORK_HOURS NUMBER(4, 2),
  ENT_DATE DATE,
  USER_ID NUMBER(8, 0),
  DM_ID NUMBER(4, 0),
  LATE_GOING NUMBER(15, 2),
  DAY_STATUS VARCHAR2(1 BYTE),
  CONSTRAINT TEMP_EMP_ATTENDANCE_O_PK PRIMARY KEY (CM_CODE, EAE_EM_ID, EAE_DATE, EAE_MONTH, EAE_YEAR) USING INDEX TABLESPACE SYSTEM STORAGE ( INITIAL 64K MAXEXTENTS UNLIMITED ))
TABLESPACE SYSTEM
STORAGE (
  INITIAL 64K
  MAXEXTENTS UNLIMITED
)
LOGGING;REMARK VARCHAR2(1000 BYTE),
  WORK_HOURS NUMBER(4, 2),
  ENT_DATE DATE,
  USER_ID NUMBER(8, 0),
  DM_ID NUMBER(4, 0),
  LATE_GOING NUMBER(15, 2),
  DAY_STATUS VARCHAR2(1 BYTE),
  CONSTRAINT TEMP_EMP_ATTENDANCE_O_PK PRIMARY KEY (CM_CODE, EAE_EM_ID, EAE_DATE, EAE_MONTH, EAE_YEAR) USING INDEX TABLESPACE SYSTEM STORAGE ( INITIAL 64K MAXEXTENTS UNLIMITED ))
TABLESPACE SYSTEM
STORAGE (
  INITIAL 64K
  MAXEXTENTS UNLIMITED
)
LOGGING;

CREATE INDEX SYSTEM.IND_TEMP_DAILY2_O ON SYSTEM.TEMP_EMP_ATTENDANCE (CM_CODE, EAE_EM_ID, EAE_DATE, EM_TYPE_CODE, EG_ID, DEPT_CODE)REMARK VARCHAR2(1000 BYTE),
  WORK_HOURS NUMBER(4, 2),
  ENT_DATE DATE,
  USER_ID NUMBER(8, 0),
  DM_ID NUMBER(4, 0),
  LATE_GOING NUMBER(15, 2),
  DAY_STATUS VARCHAR2(1 BYTE),
  CONSTRAINT TEMP_EMP_ATTENDANCE_O_PK PRIMARY KEY (CM_CODE, EAE_EM_ID, EAE_DATE, EAE_MONTH, EAE_YEAR) USING INDEX TABLESPACE SYSTEM STORAGE ( INITIAL 64K MAXEXTENTS UNLIMITED ))
TABLESPACE SYSTEM
STORAGE (
  INITIAL 64K
  MAXEXTENTS UNLIMITED
)
LOGGING;

CREATE INDEX SYSTEM.IND_TEMP_DAILY2_O ON SYSTEM.TEMP_EMP_ATTENDANCE (CM_CODE, EAE_EM_ID, EAE_DATE, EM_TYPE_CODE, EG_ID, DEPT_CODE)
TABLESPACE SYSTEMREMARK VARCHAR2(1000 BYTE),
  WORK_HOURS NUMBER(4, 2),
  ENT_DATE DATE,
  USER_ID NUMBER(8, 0),
  DM_ID NUMBER(4, 0),
  LATE_GOING NUMBER(15, 2),
  DAY_STATUS VARCHAR2(1 BYTE),
  CONSTRAINT TEMP_EMP_ATTENDANCE_O_PK PRIMARY KEY (CM_CODE, EAE_EM_ID, EAE_DATE, EAE_MONTH, EAE_YEAR) USING INDEX TABLESPACE SYSTEM STORAGE ( INITIAL 64K MAXEXTENTS UNLIMITED ))
TABLESPACE SYSTEM
STORAGE (
  INITIAL 64K
  MAXEXTENTS UNLIMITED
)
LOGGING;

CREATE INDEX SYSTEM.IND_TEMP_DAILY2_O ON SYSTEM.TEMP_EMP_ATTENDANCE (CM_CODE, EAE_EM_ID, EAE_DATE, EM_TYPE_CODE, EG_ID, DEPT_CODE)
TABLESPACE SYSTEM
STORAGE (REMARK VARCHAR2(1000 BYTE),
  WORK_HOURS NUMBER(4, 2),
  ENT_DATE DATE,
  USER_ID NUMBER(8, 0),
  DM_ID NUMBER(4, 0),
  LATE_GOING NUMBER(15, 2),
  DAY_STATUS VARCHAR2(1 BYTE),
  CONSTRAINT TEMP_EMP_ATTENDANCE_O_PK PRIMARY KEY (CM_CODE, EAE_EM_ID, EAE_DATE, EAE_MONTH, EAE_YEAR) USING INDEX TABLESPACE SYSTEM STORAGE ( INITIAL 64K MAXEXTENTS UNLIMITED ))
TABLESPACE SYSTEM
STORAGE (
  INITIAL 64K
  MAXEXTENTS UNLIMITED
)
LOGGING;

CREATE INDEX SYSTEM.IND_TEMP_DAILY2_O ON SYSTEM.TEMP_EMP_ATTENDANCE (CM_CODE, EAE_EM_ID, EAE_DATE, EM_TYPE_CODE, EG_ID, DEPT_CODE)
TABLESPACE SYSTEM
STORAGE (
  INITIAL 64KREMARK VARCHAR2(1000 BYTE),
  WORK_HOURS NUMBER(4, 2),
  ENT_DATE DATE,
  USER_ID NUMBER(8, 0),
  DM_ID NUMBER(4, 0),
  LATE_GOING NUMBER(15, 2),
  DAY_STATUS VARCHAR2(1 BYTE),
  CONSTRAINT TEMP_EMP_ATTENDANCE_O_PK PRIMARY KEY (CM_CODE, EAE_EM_ID, EAE_DATE, EAE_MONTH, EAE_YEAR) USING INDEX TABLESPACE SYSTEM STORAGE ( INITIAL 64K MAXEXTENTS UNLIMITED ))
TABLESPACE SYSTEM
STORAGE (
  INITIAL 64K
  MAXEXTENTS UNLIMITED
)
LOGGING;

CREATE INDEX SYSTEM.IND_TEMP_DAILY2_O ON SYSTEM.TEMP_EMP_ATTENDANCE (CM_CODE, EAE_EM_ID, EAE_DATE, EM_TYPE_CODE, EG_ID, DEPT_CODE)
TABLESPACE SYSTEM
STORAGE (
  INITIAL 64K
  MAXEXTENTS UNLIMITEDREMARK VARCHAR2(1000 BYTE),
  WORK_HOURS NUMBER(4, 2),
  ENT_DATE DATE,
  USER_ID NUMBER(8, 0),
  DM_ID NUMBER(4, 0),
  LATE_GOING NUMBER(15, 2),
  DAY_STATUS VARCHAR2(1 BYTE),
  CONSTRAINT TEMP_EMP_ATTENDANCE_O_PK PRIMARY KEY (CM_CODE, EAE_EM_ID, EAE_DATE, EAE_MONTH, EAE_YEAR) USING INDEX TABLESPACE SYSTEM STORAGE ( INITIAL 64K MAXEXTENTS UNLIMITED ))
TABLESPACE SYSTEM
STORAGE (
  INITIAL 64K
  MAXEXTENTS UNLIMITED
)
LOGGING;

CREATE INDEX SYSTEM.IND_TEMP_DAILY2_O ON SYSTEM.TEMP_EMP_ATTENDANCE (CM_CODE, EAE_EM_ID, EAE_DATE, EM_TYPE_CODE, EG_ID, DEPT_CODE)
TABLESPACE SYSTEM
STORAGE (
  INITIAL 64K
  MAXEXTENTS UNLIMITED
)REMARK VARCHAR2(1000 BYTE),
  WORK_HOURS NUMBER(4, 2),
  ENT_DATE DATE,
  USER_ID NUMBER(8, 0),
  DM_ID NUMBER(4, 0),
  LATE_GOING NUMBER(15, 2),
  DAY_STATUS VARCHAR2(1 BYTE),
  CONSTRAINT TEMP_EMP_ATTENDANCE_O_PK PRIMARY KEY (CM_CODE, EAE_EM_ID, EAE_DATE, EAE_MONTH, EAE_YEAR) USING INDEX TABLESPACE SYSTEM STORAGE ( INITIAL 64K MAXEXTENTS UNLIMITED ))
TABLESPACE SYSTEM
STORAGE (
  INITIAL 64K
  MAXEXTENTS UNLIMITED
)
LOGGING;

CREATE INDEX SYSTEM.IND_TEMP_DAILY2_O ON SYSTEM.TEMP_EMP_ATTENDANCE (CM_CODE, EAE_EM_ID, EAE_DATE, EM_TYPE_CODE, EG_ID, DEPT_CODE)
TABLESPACE SYSTEM
STORAGE (
  INITIAL 64K
  MAXEXTENTS UNLIMITED
)
LOGGING;REMARK VARCHAR2(1000 BYTE),
  WORK_HOURS NUMBER(4, 2),
  ENT_DATE DATE,
  USER_ID NUMBER(8, 0),
  DM_ID NUMBER(4, 0),
  LATE_GOING NUMBER(15, 2),
  DAY_STATUS VARCHAR2(1 BYTE),
  CONSTRAINT TEMP_EMP_ATTENDANCE_O_PK PRIMARY KEY (CM_CODE, EAE_EM_ID, EAE_DATE, EAE_MONTH, EAE_YEAR) USING INDEX TABLESPACE SYSTEM STORAGE ( INITIAL 64K MAXEXTENTS UNLIMITED ))
TABLESPACE SYSTEM
STORAGE (
  INITIAL 64K
  MAXEXTENTS UNLIMITED
)
LOGGING;

CREATE INDEX SYSTEM.IND_TEMP_DAILY2_O ON SYSTEM.TEMP_EMP_ATTENDANCE (CM_CODE, EAE_EM_ID, EAE_DATE, EM_TYPE_CODE, EG_ID, DEPT_CODE)
TABLESPACE SYSTEM
STORAGE (
  INITIAL 64K
  MAXEXTENTS UNLIMITED
)
LOGGING;

CREATE UNIQUE INDEX SYSTEM.IND_TEMP_DAILY_O ON SYSTEM.TEMP_EMP_ATTENDANCE (EAE_EM_ID, CM_CODE, EAE_DATE)REMARK VARCHAR2(1000 BYTE),
  WORK_HOURS NUMBER(4, 2),
  ENT_DATE DATE,
  USER_ID NUMBER(8, 0),
  DM_ID NUMBER(4, 0),
  LATE_GOING NUMBER(15, 2),
  DAY_STATUS VARCHAR2(1 BYTE),
  CONSTRAINT TEMP_EMP_ATTENDANCE_O_PK PRIMARY KEY (CM_CODE, EAE_EM_ID, EAE_DATE, EAE_MONTH, EAE_YEAR) USING INDEX TABLESPACE SYSTEM STORAGE ( INITIAL 64K MAXEXTENTS UNLIMITED ))
TABLESPACE SYSTEM
STORAGE (
  INITIAL 64K
  MAXEXTENTS UNLIMITED
)
LOGGING;

CREATE INDEX SYSTEM.IND_TEMP_DAILY2_O ON SYSTEM.TEMP_EMP_ATTENDANCE (CM_CODE, EAE_EM_ID, EAE_DATE, EM_TYPE_CODE, EG_ID, DEPT_CODE)
TABLESPACE SYSTEM
STORAGE (
  INITIAL 64K
  MAXEXTENTS UNLIMITED
)
LOGGING;

CREATE UNIQUE INDEX SYSTEM.IND_TEMP_DAILY_O ON SYSTEM.TEMP_EMP_ATTENDANCE (EAE_EM_ID, CM_CODE, EAE_DATE)
TABLESPACE SYSTEMREMARK VARCHAR2(1000 BYTE),
  WORK_HOURS NUMBER(4, 2),
  ENT_DATE DATE,
  USER_ID NUMBER(8, 0),
  DM_ID NUMBER(4, 0),
  LATE_GOING NUMBER(15, 2),
  DAY_STATUS VARCHAR2(1 BYTE),
  CONSTRAINT TEMP_EMP_ATTENDANCE_O_PK PRIMARY KEY (CM_CODE, EAE_EM_ID, EAE_DATE, EAE_MONTH, EAE_YEAR) USING INDEX TABLESPACE SYSTEM STORAGE ( INITIAL 64K MAXEXTENTS UNLIMITED ))
TABLESPACE SYSTEM
STORAGE (
  INITIAL 64K
  MAXEXTENTS UNLIMITED
)
LOGGING;

CREATE INDEX SYSTEM.IND_TEMP_DAILY2_O ON SYSTEM.TEMP_EMP_ATTENDANCE (CM_CODE, EAE_EM_ID, EAE_DATE, EM_TYPE_CODE, EG_ID, DEPT_CODE)
TABLESPACE SYSTEM
STORAGE (
  INITIAL 64K
  MAXEXTENTS UNLIMITED
)
LOGGING;

CREATE UNIQUE INDEX SYSTEM.IND_TEMP_DAILY_O ON SYSTEM.TEMP_EMP_ATTENDANCE (EAE_EM_ID, CM_CODE, EAE_DATE)
TABLESPACE SYSTEM
STORAGE (REMARK VARCHAR2(1000 BYTE),
  WORK_HOURS NUMBER(4, 2),
  ENT_DATE DATE,
  USER_ID NUMBER(8, 0),
  DM_ID NUMBER(4, 0),
  LATE_GOING NUMBER(15, 2),
  DAY_STATUS VARCHAR2(1 BYTE),
  CONSTRAINT TEMP_EMP_ATTENDANCE_O_PK PRIMARY KEY (CM_CODE, EAE_EM_ID, EAE_DATE, EAE_MONTH, EAE_YEAR) USING INDEX TABLESPACE SYSTEM STORAGE ( INITIAL 64K MAXEXTENTS UNLIMITED ))
TABLESPACE SYSTEM
STORAGE (
  INITIAL 64K
  MAXEXTENTS UNLIMITED
)
LOGGING;

CREATE INDEX SYSTEM.IND_TEMP_DAILY2_O ON SYSTEM.TEMP_EMP_ATTENDANCE (CM_CODE, EAE_EM_ID, EAE_DATE, EM_TYPE_CODE, EG_ID, DEPT_CODE)
TABLESPACE SYSTEM
STORAGE (
  INITIAL 64K
  MAXEXTENTS UNLIMITED
)
LOGGING;

CREATE UNIQUE INDEX SYSTEM.IND_TEMP_DAILY_O ON SYSTEM.TEMP_EMP_ATTENDANCE (EAE_EM_ID, CM_CODE, EAE_DATE)
TABLESPACE SYSTEM
STORAGE (
  INITIAL 64KREMARK VARCHAR2(1000 BYTE),
  WORK_HOURS NUMBER(4, 2),
  ENT_DATE DATE,
  USER_ID NUMBER(8, 0),
  DM_ID NUMBER(4, 0),
  LATE_GOING NUMBER(15, 2),
  DAY_STATUS VARCHAR2(1 BYTE),
  CONSTRAINT TEMP_EMP_ATTENDANCE_O_PK PRIMARY KEY (CM_CODE, EAE_EM_ID, EAE_DATE, EAE_MONTH, EAE_YEAR) USING INDEX TABLESPACE SYSTEM STORAGE ( INITIAL 64K MAXEXTENTS UNLIMITED ))
TABLESPACE SYSTEM
STORAGE (
  INITIAL 64K
  MAXEXTENTS UNLIMITED
)
LOGGING;

CREATE INDEX SYSTEM.IND_TEMP_DAILY2_O ON SYSTEM.TEMP_EMP_ATTENDANCE (CM_CODE, EAE_EM_ID, EAE_DATE, EM_TYPE_CODE, EG_ID, DEPT_CODE)
TABLESPACE SYSTEM
STORAGE (
  INITIAL 64K
  MAXEXTENTS UNLIMITED
)
LOGGING;

CREATE UNIQUE INDEX SYSTEM.IND_TEMP_DAILY_O ON SYSTEM.TEMP_EMP_ATTENDANCE (EAE_EM_ID, CM_CODE, EAE_DATE)
TABLESPACE SYSTEM
STORAGE (
  INITIAL 64K
  MAXEXTENTS UNLIMITEDREMARK VARCHAR2(1000 BYTE),
  WORK_HOURS NUMBER(4, 2),
  ENT_DATE DATE,
  USER_ID NUMBER(8, 0),
  DM_ID NUMBER(4, 0),
  LATE_GOING NUMBER(15, 2),
  DAY_STATUS VARCHAR2(1 BYTE),
  CONSTRAINT TEMP_EMP_ATTENDANCE_O_PK PRIMARY KEY (CM_CODE, EAE_EM_ID, EAE_DATE, EAE_MONTH, EAE_YEAR) USING INDEX TABLESPACE SYSTEM STORAGE ( INITIAL 64K MAXEXTENTS UNLIMITED ))
TABLESPACE SYSTEM
STORAGE (
  INITIAL 64K
  MAXEXTENTS UNLIMITED
)
LOGGING;

CREATE INDEX SYSTEM.IND_TEMP_DAILY2_O ON SYSTEM.TEMP_EMP_ATTENDANCE (CM_CODE, EAE_EM_ID, EAE_DATE, EM_TYPE_CODE, EG_ID, DEPT_CODE)
TABLESPACE SYSTEM
STORAGE (
  INITIAL 64K
  MAXEXTENTS UNLIMITED
)
LOGGING;

CREATE UNIQUE INDEX SYSTEM.IND_TEMP_DAILY_O ON SYSTEM.TEMP_EMP_ATTENDANCE (EAE_EM_ID, CM_CODE, EAE_DATE)
TABLESPACE SYSTEM
STORAGE (
  INITIAL 64K
  MAXEXTENTS UNLIMITED
)REMARK VARCHAR2(1000 BYTE),
  WORK_HOURS NUMBER(4, 2),
  ENT_DATE DATE,
  USER_ID NUMBER(8, 0),
  DM_ID NUMBER(4, 0),
  LATE_GOING NUMBER(15, 2),
  DAY_STATUS VARCHAR2(1 BYTE),
  CONSTRAINT TEMP_EMP_ATTENDANCE_O_PK PRIMARY KEY (CM_CODE, EAE_EM_ID, EAE_DATE, EAE_MONTH, EAE_YEAR) USING INDEX TABLESPACE SYSTEM STORAGE ( INITIAL 64K MAXEXTENTS UNLIMITED ))
TABLESPACE SYSTEM
STORAGE (
  INITIAL 64K
  MAXEXTENTS UNLIMITED
)
LOGGING;

CREATE INDEX SYSTEM.IND_TEMP_DAILY2_O ON SYSTEM.TEMP_EMP_ATTENDANCE (CM_CODE, EAE_EM_ID, EAE_DATE, EM_TYPE_CODE, EG_ID, DEPT_CODE)
TABLESPACE SYSTEM
STORAGE (
  INITIAL 64K
  MAXEXTENTS UNLIMITED
)
LOGGING;

CREATE UNIQUE INDEX SYSTEM.IND_TEMP_DAILY_O ON SYSTEM.TEMP_EMP_ATTENDANCE (EAE_EM_ID, CM_CODE, EAE_DATE)
TABLESPACE SYSTEM
STORAGE (
  INITIAL 64K
  MAXEXTENTS UNLIMITED
)
LOGGING;

首先,使用 "SYSTEM" 用户帐户来获取用户数据是一个糟糕的设计,并且您正在 SYSTEM table 空间上创建您的 table。您应该有另一个用户应该在不同的 table 空间拥有您的对象。您不应在 "SYSTEM TABLESPACE" 上保留任何用户数据。

现在要使您的查询执行速度更快,您需要考虑几个参数。

开始于:

  1. 检查您是否更新了 table 和索引的统计信息。如果您的统计数据过时,那么这可能是主要原因,因此请在 table 上更新统计数据。如果统计数据没有过时,请检查这个 table last_analyzed 是什么时候。如果自上次分析以来 table 中的数据变化超过 ~10%,则在 table.

  2. 上收集统计数据
  3. 检查一下 table 上是否存在高碎片。如果是,那么考虑重建它。

  4. 如果您的 table 大小非常大,那么尝试在 table 上实施分区概念。

  5. 在报告 运行 时检查 OS 资源利用率。你有足够的 RAM,CPU 来完成你的查询。 (free -m, vmstat 1 10, iostat -c 1 10)

  6. AWR 报告最适合分析数据库发生的情况。当您开始生成报告时记下时间,然后在完成后记下时间并生成 AWR 报告。如果持续时间超过 1 小时,则生成 AWR 1 小时间隔。你可以很容易地找出你的数据库发生了什么。

这些是任何人都可以遵循的通用方法。还有很多参数可以从 AWR 报告中提取出来。