Ich habe eine Abfrage, die 17 Sekunden dauert, um auszuführen. Ich habe Indizes auf FIPS, STR_DT, END_DT angewendet, aber es dauert immer noch. Irgendwelche Vorschläge, wie ich die Leistung verbessern kann?Verbessern Join-Abfrage in Oracle
Meine Frage:
SELECT /*+ALL_ROWS*/ K_LF_SVA_VA.NEXTVAL VAL_REC_ID, a.REC_ID,
b.VID,
1 VA_SEQ,
51 VA_VALUE_DATATYPE,
b.VALUE VAL_NUM,
SYSDATE CREATED_DATE,
SYSDATE UPDATED_DATE
FROM CTY_REC a JOIN FIPS_CONS b
ON a.FIPS=b.FIPS AND a.STR_DT=b.STR_DT AND a.END_DT=b.END_DT;
DESC CTY_REC;
Name Null Type
------------------- ---- -------------
REC_ID NUMBER(38)
DATA_SOURCE_DATE DATE
STR_DT DATE
END_DT DATE
VID_RECSET_ID NUMBER
VID_VALSET_ID NUMBER
FIPS VARCHAR2(255)
DESC FIPS_CONS;
Name Null Type
------------- -------- -------------
STR_DT DATE
END_DT DATE
FIPS VARCHAR2(255)
VARIABLE VARCHAR2(515)
VALUE NUMBER
VID NOT NULL NUMBER
-Plan erklären:
Plan hash value: 919279614
--------------------------------------------------------------
| Id | Operation | Name |
--------------------------------------------------------------
| 0 | SELECT STATEMENT | |
| 1 | SEQUENCE | K_VAL |
| 2 | HASH JOIN | |
| 3 | TABLE ACCESS FULL| CTY_REC |
| 4 | TABLE ACCESS FULL| FIPS_CONS |
--------------------------------------------------------------
Ich habe Beschreibung der Tabellen hinzugefügt und Plan für meine Abfrage erklären.
Wie viele Zeilen sind in den Tabellen? Wie viele Zeilen werden von der Abfrage projiziert? Welcher Anteil von Zeilen stimmt nicht mit Zeilen in der anderen Tabelle überein? Was ist der Cache-Wert für die Sequenz? –
Können Sie den vollständigen Ausführungsplan anzeigen? Einschließlich der Zeilenschätzung und der Kosten Spalten (und vielleicht TmpSpc) –