SQL查询需要9个小时才能获得12万条记录

时间:2019-05-12 08:21:43

标签: sql oracle performance query-optimization

我有一个小的查询,我需要做一些简单的计算;但是,这需要永远完成。在更大的数据上,我曾经使用过类似的查询,而在性能方面则更好。我曾尝试对源表进行排序,但同样的情况是我的ETL每秒移动2行...以下是我的查询(关于调优的任何建议都值得欢迎)

SELECT      
    t1.APPID,
    t1.APP_INS_ID,
    t1.APP_INS_ID_DUE_DTAE,
    TRUNC(LAST_DAY(ADD_MONTHS(t1.APP_INS_ID_DUE_DTAE, -1))) +1 AS EndDateOfPaymentMOnth,
    t1.APP_INS_ID_PAYMENT_DATE,
    t1.ispaid,
    (SELECT COUNT(APP_INS_ID) 
     FROM tbl1 t2 
     WHERE t1.APPID = t2.APPID 
       AND t2.APP_INS_ID <= t1.APP_INS_ID 
       AND T2.Is_due = 1 
       AND ispaid = 'Y'  
       AND TRUNC(APP_INS_ID_PAYMENT_DATE) <=  TRUNC(LAST_DAY(ADD_MONTHS(t1.APP_INS_ID_DUE_DTAE, -1))) + 1) AS TOTAL_PAID
FROM 
    tbl1 t1  
WHERE  
    t1.is_due = 1 
    AND t1.APP_INS_ID_DUE_DTAE < TRUNC((SYSDATE - (EXTRACT(DAY FROM SYSDATE)) + 1))

基本上,我正在尝试计算在到期付款日之前已支付多少分期付款。

非常感谢您的帮助!

以下是具有预期输出的简单数据:

APPID   APP_INS_ID  APP_INS_ID_DUE_DTAE EndDateOfPaymentMOnth 
APP_INS_ID_PAYMENT_DATE     ispaid  TOTAL_PAID
1|  1|      1-Aug-14|       1-Aug-14|       2-Oct-14|           Y|  0|
1|  2|      1-Sep-14|       1-Sep-14|       2-Oct-14|           Y|  0|
1|  3|      1-Oct-14|       1-Oct-14|       2-Oct-14|           Y|  0|
1|  4|      1-Nov-14|       1-Nov-14|       2-Oct-14|           Y|  4|
1|  5|      1-Dec-14|       1-Dec-14|       24-Nov-14|          Y|  5|
1|  6|      1-Jan-15|       1-Jan-15|       9-Dec-14|           Y|  6|

1 个答案:

答案 0 :(得分:0)

谢谢大家的帮助。我通过在该表上应用索引解决了问题。现在我的工作每秒移动3万条记录。