Ich habe eine komplexe Anforderung, einige Datensätze in einer Tabelle zu aktualisieren, indem Sie mehrere Tabellen zusammenführen, um die richtigen Datensätze zu finden. Ich habe die folgende Abfrage geschrieben, die funktioniert, aber es dauert 2,5 Minuten, um ausgeführt zu werden, was mein DB Verbindungszeitlimit verursacht. Gibt es eine Möglichkeit, die Effizienz dieser Abfrage zu verbessern, indem Sie sie neu schreiben? Ich habe auch MERGE Ansatz versucht, die auch zu lange dauert. Ich habe mehr als 2 Millionen Datensätze in EVENT_DYNAMIC_ATTRIBUTE Tabelle und 1 Million Datensätze in EVENT-Tabelle und 100 tausend Datensätze in CATEGORY-Tabelle.Schreiben Sie eine effiziente Aktualisierungsabfrage, indem Sie mehrere Tabellen in Oracle verknüpfen.
UPDATE EVENT_DYNAMIC_ATTRIBUTE eda
SET eda.ATTRIBUTE_VALUE = 'claim',
eda.LAST_UPDATED_DATE = SYSDATE,
eda.LAST_UPDATED_BY = 'superUsers'
WHERE eda.DYNAMIC_ATTRIBUTE_NAME_ID=4002
AND eda.EVENT_ID IN
(SELECT e.EVENT_ID
FROM EVENT e
WHERE e.PRIMARY_CATEGORY_ID IN
(SELECT CATEGORY_ID
FROM CATEGORY START WITH CATEGORY_ID = 495984 CONNECT BY PARENT_ID =
PRIOR CATEGORY_ID));
Dies ist die Zusammenführung Abfrage:
MERGE INTO EVENT_DYNAMIC_ATTRIBUTE eda
USING (SELECT DISTINCT e.EVENT_ID FROM (
SELECT CATEGORY_ID
FROM CATEGORY
START WITH CATEGORY_ID=495984
CONNECT BY PARENT_ID =
PRIOR CATEGORY_ID) CATEGORIES
INNER JOIN EVENT E ON e.PRIMARY_CATEGORY_ID = CATEGORY_ID
INNER JOIN EVENT_DYNAMIC_ATTRIBUTE ed on ed.EVENT_ID = E.EVENT_ID) temp
ON (eda.EVENT_ID = temp.EVENT_ID)
WHEN MATCHED THEN
UPDATE SET eda.ATTRIBUTE_VALUE = 'claim',
eda.LAST_UPDATED_DATE = SYSDATE,
eda.LAST_UPDATED_BY = 'superUser'
WHERE eda.DYNAMIC_ATTRIBUTE_NAME_ID=4002
MERGE wahrscheinlich der beste Weg ist, diese – GurV
etwas zu erreichen ich immer darauf achten, in dieser Situation zu versuchen, zu 'ORDER BY ed.rowid' in Ihrem 'USING'-Klausel. In einem 'UPDATE' mit Joins hilft es sehr und ich vermute, dass es bei einem' MERGE' mit Joins helfen kann. Sieh diesen Thread: https://asktom.oracle.com/pls/asktom/asktom.search?tag=how-to-update-millions-or-records-in-a-table-200211#5402195700346034590. Ich habe gesehen, dass es eine Verbesserung von 40-60% gibt. –