Ich habe zwei Sätze von Daten aus externer Quelle - Kaufdatum des Kunden und letzte E-Mail Klick/Öffnen Sie das Datum des Kunden. Dies wird in zwei Tabellen PURCHASE_INTER und ACTIVITY_INTER gespeichert. Kaufdaten sind mehrfach und ich muss das letzte Kaufdatum abholen. Die Aktivitätsdaten sind jedoch für jeden Kunden eindeutig. Die Daten sind voneinander unabhängig und andere Daten sind möglicherweise nicht vorhanden. Wir haben unten Abfrage geschrieben, die zwei Tabellen kombiniert, gruppiert sie auf person_id, die ID des Kunden ist, der von der externen Quelle kommt und das späteste der Daten erhält, tritt mit unserer Kundentabelle bei, um die Kundenemail zu erhalten, und tritt wieder mit einer anderen Tabelle bei wo diese Daten letztendlich gespeichert werden, um zu wissen, ob es Einfüge- oder Aktualisierungsoperation ist. Könnten Sie mir bitte vorschlagen, wie ich die Leistung dieser Abfrage verbessern kann? Es ist schrecklich langsam und dauert mehr als 10 Stunden. In den Tabellen PURCHASE_INTER und ACTIVITY_INTER sind Millionen von Datensätzen enthalten.Verbessern Sie die Leistung
SELECT INTER.*, C.ID AS CUSTOMER_ID, C.EMAIL AS CUSTOMER_EMAIL, LSI.ID AS INTERACTION_ID, ROW_NUMBER() OVER (ORDER BY PERSON_ID ASC) AS RN FROM (
SELECT PERSON_ID AS PERSON_ID,
MAX(LAST_CLICK_DATE) AS LAST_CLICK_DATE,
MAX(LAST_OPEN_DATE) AS LAST_OPEN_DATE,
MAX(LAST_PURCHASE_DATE) AS LAST_PURCHASE_DATE
FROM (
SELECT ACT.PERSON_ID AS PERSON_ID,
ACT.LAST_CLICK_DATE AS LAST_CLICK_DATE,
ACT.LAST_OPEN_DATE AS LAST_OPEN_DATE,
NULL AS LAST_PURCHASE_DATE
FROM ACTIVITY_INTER ACT
WHERE ACT.JOB_ID = 77318317
UNION
SELECT PUR.PERSON_ID AS PERSON_ID,
NULL AS LAST_CLICK_DATE,
NULL AS LAST_OPEN_DATE,
PUR.LAST_PURCHASE_DATE AS LAST_PURCHASE_DATE
FROM PURCHASE_INTER PUR
WHERE PUR.JOB_ID = 77318317
) GROUP BY PERSON_ID
) INTER LEFT JOIN CUSTOMER C ON INTER.PERSON_ID = C.PERSON_ID
LEFT JOIN INTERACTION LSI ON C.ID = LSI.CUSTOMER_ID;
Müssen Sie Duplikate entfernen, oder können Sie "UNION ALL" anstelle von "UNION" verwenden? – jarlh
Wie viele Datensätze entsprechen einem bestimmten Job? –
Müssen Sie wirklich die Spalte "RN" bereitstellen? Wenn Sie eine große Anzahl von Zeilen zurückgeben, kann das eine hohe Rechenleistung erfordern. –