Müşterinin satın alım tarihi ve müşterinin son e-posta tıklama/açılış tarihi olan harici kaynaktan gelen iki veri setim var. Bu, sırasıyla iki tablo PURCHASE_INTER VE ACTIVITY_INTER tablolarında saklanır. Satın alma verileri birden fazla ve son satın alma tarihini almam gerekiyor. Ancak aktivite verileri her müşteri için benzersizdir. Veriler birbirinden bağımsızdır ve diğer veri grubu mevcut olmayabilir. İki tabloyu birleştiren, müşterinin dış kaynaktan gelen müşterinin kimliği olan ve tarihlerin en sonunu alan person_id bazında gruplandırdığımız, müşteri e-postasını almak için müşteri masamıza katıldığımız ve yine başka bir masaya katılacağımız bir sorgu oluşturduk. Bu verinin nihayetinde operasyonun eklendiğini veya güncellenip güncellenmediğini öğrenmek için depolanacağı yer. Bu sorgunun performansını nasıl geliştirebileceğimi önerebilir misiniz? Çok yavaş ve 10 saatten fazla sürüyor. PURCHASE_INTER AND ACTIVITY_INTER tablolarında milyonlarca kayıt var.Performansı iyileştirin
ACTIVITY_INTER(JOB_ID, PERSON_ID, LAST_CLICK_DATE, LAST_OPEN_DATE)
PURCHASE_INTER(JOB_ID, PERSON_ID, LAST_PURCHASE_DATE)
CUSTOMER(PERSON_ID)
INTERACTION(CUSTOMER_ID)
(ilk tw için:
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;
Kopyaları kaldırmanız mı gerekiyor, yoksa "UNION" yerine "UNION ALL" kullanıyor musunuz? – jarlh
Belirli bir iş ile kaç kayıt var? –
Gerçekten 'RN' sütununu sağlamanız gerekiyor mu? Çok sayıda satır döndürürseniz bu hesaplamak pahalı olabilir. –