Thanks Dennis! You may not want me to send the data - there are 47 million rows in the table. 
At the end of the create script is the script our guy is trying to run. We really need Oracle to use the index that starts with the emplid because it runs best. . .
Distribution of values that we are selecting on
emplid - 13811 distinct values
trans_date - 3157 distinct values
stf_act_type - 9 distinct values
Let me know if I can provide anything else to help with this. . .
CREATE TABLE PS_STAFF_TRNSACTNS
(
STF_ACCT_TYPE VARCHAR2(5 BYTE) NOT NULL,
EMPLID VARCHAR2(11 BYTE) NOT NULL,
TRANS_DATE DATE NOT NULL,
SOURCE_SYSTEM VARCHAR2(3 BYTE) NOT NULL,
SOURCE_KEY VARCHAR2(26 BYTE) NOT NULL,
SOURCE_CODE_TYPE VARCHAR2(1 BYTE) NOT NULL,
SOURCE_CODE VARCHAR2(12 BYTE) NOT NULL,
TRANS_AMOUNT NUMBER(9,2) NOT NULL,
POSTED_FLAG VARCHAR2(1 BYTE) NOT NULL,
CLEARED_STATUS VARCHAR2(1 BYTE) NOT NULL,
SOURCE_DATE DATE NOT NULL,
DESCR VARCHAR2(30 BYTE) NOT NULL,
ADVANCE_CHK_NUM INTEGER NOT NULL,
AUDIT_OPRID VARCHAR2(30 BYTE) NOT NULL,
TO_CLEAR_BY_DATE DATE
)
TABLESPACE STFMEMO
RESULT_CACHE (MODE DEFAULT)
PCTUSED 0
PCTFREE 10
INITRANS 1
MAXTRANS 255
STORAGE (
INITIAL 3428360K
NEXT 1M
MAXSIZE UNLIMITED
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
BUFFER_POOL DEFAULT
FLASH_CACHE DEFAULT
CELL_FLASH_CACHE DEFAULT
)
LOGGING
CACHE
PARALLEL ( DEGREE 4 INSTANCES 1 )
MONITORING;
CREATE INDEX PSASTAFF_TRNSACTNS ON PS_STAFF_TRNSACTNS
(EMPLID, “TRANS_DATE” DESC, STF_ACCT_TYPE)
LOGGING
TABLESPACE STFMEMOI
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 1500M
NEXT 500M
MAXSIZE UNLIMITED
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
BUFFER_POOL DEFAULT
FLASH_CACHE DEFAULT
CELL_FLASH_CACHE DEFAULT
)
NOPARALLEL;
CREATE INDEX PSBSTAFF_TRNSACTNS ON PS_STAFF_TRNSACTNS
(“TRANS_DATE” DESC, STF_ACCT_TYPE, SOURCE_SYSTEM)
LOGGING
TABLESPACE STFMEMOI
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 1024M
NEXT 1024M
MAXSIZE UNLIMITED
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
BUFFER_POOL DEFAULT
FLASH_CACHE DEFAULT
CELL_FLASH_CACHE DEFAULT
)
NOPARALLEL;
CREATE INDEX PSCSTAFF_TRNSACTNS ON PS_STAFF_TRNSACTNS
(STF_ACCT_TYPE, EMPLID, “TRANS_DATE” DESC)
LOGGING
TABLESPACE STFMEMOI
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 1024M
NEXT 1024M
MAXSIZE UNLIMITED
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
BUFFER_POOL DEFAULT
FLASH_CACHE DEFAULT
CELL_FLASH_CACHE DEFAULT
)
NOPARALLEL;
CREATE INDEX PSDSTAFF_TRNSACTNS ON PS_STAFF_TRNSACTNS
(EMPLID, POSTED_FLAG, STF_ACCT_TYPE, TRANS_AMOUNT)
LOGGING
TABLESPACE STFMEMOI
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 150M
NEXT 50M
MAXSIZE UNLIMITED
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
BUFFER_POOL DEFAULT
FLASH_CACHE DEFAULT
CELL_FLASH_CACHE DEFAULT
)
NOPARALLEL;
CREATE INDEX PSESTAFF_TRNSACTNS ON PS_STAFF_TRNSACTNS
(EMPLID, TRANS_DATE, SOURCE_SYSTEM, SOURCE_CODE_TYPE, SOURCE_CODE)
LOGGING
TABLESPACE PSINDEX
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 2029640K
NEXT 1M
MAXSIZE UNLIMITED
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
BUFFER_POOL DEFAULT
FLASH_CACHE DEFAULT
CELL_FLASH_CACHE DEFAULT
)
NOPARALLEL;
CREATE OR REPLACE TRIGGER AUDIT_STF_TRANS
after delete
on ps_staff_trnsactns
for each row
begin
if deleting then
insert into ps_audit_stf_trans
(AUDIT_OPRID,AUDIT_STAMP,AUDIT_ACTN,STF_ACCT_TYPE,EMPLID,TRANS_DATE,
SOURCE_SYSTEM,SOURCE_KEY,SOURCE_CODE_TYPE, SOURCE_CODE,
TRANS_AMOUNT,POSTED_FLAG,SOURCE_DATE,DESCR)
values (USER, SYSDATE, ‘D’, :old.stf_acct_type, :old.emplid, :old.trans_date,
:old.source_system, :old.source_key, :old.source_code_type, :old.source_code,
:old.trans_amount, :old.posted_flag, :old.source_date, :old.descr);
end if;
end;
/