Слишком низкая производительность запроса - PullRequest
0 голосов
/ 09 июля 2020

Запрос ниже занял 2 мин. выполнить, но при замене 'AND TO_CHAR (BM.BILL_DATE :: date,' YYYY-MM ') =' 2020-07 '' на 'AND bm.BILL_DATE :: date between to_date (' 2020-07-01 ',' ГГГГ-ММ-ДД ') и to_date (' 2020-07-31 ',' ГГГГ-ММ-ДД ')' требует 2 se c для выполнения.

версия: "EnterpriseDB 10.1.5 on x86_64-p c - linux -gnu, скомпилирован g cc (G CC) 4.4.7 20120313 (Red Hat 4.4.7-18), 64-битный "

I хотите передать только один параметр в запрос, например «ГГГГ-ММ», и получить o / p.

enter image description here enter image description here введите описание изображения здесь

'''select distinct bm.invoice_no, 
        'GST HOLD', 
                original_inv_no, 
                (select distinct bill_date 
                   from "CBF".bill_master 
                  where invoice_no = original_inv_no) BILL_DATE, 
                case 
                  WHEN TO_NUMBER(BM.TAX_TOTAL) = 0 THEN 
                   'Y' 
                  ELSE 
                   'N' 
                END TAXABLE_FLAG 
  from "CBF".bill_master BM, "CBF".product_details PD 
where BM.INVOICE_NO = PD.INVOICE_NO 
   and isactive = 'P' 
   and bill_gen_system = 'HOLD' 
   and MODIFIED_PROCESS IN ('AUTO_DEMERGE', 'MANUAL_DEMERGE') 
   AND TO_CHAR(BM.BILL_DATE ::date, 'YYYY-MM') = '2020-07' 
   AND PD.original_inv_no IS NOT NULL 
UNION 
select distinct bm.invoice_no, 
                'GST HOLD', 
               original_inv_no, 
                (select distinct bill_date 
                   from "CBF".bill_master 
                  where invoice_no = original_inv_no) BILL_DATE, 
                case 
                  WHEN TO_NUMBER(BM.TAX_TOTAL) = 0 THEN 
                   'Y' 
                  ELSE 
                   'N' 
                END TAXABLE_FLAG 
  from "CBF".bill_master BM, "CBF".adj_details PD 
where BM.INVOICE_NO = PD.INVOICE_NO 
   and isactive = 'P' 
   and bill_gen_system = 'HOLD' 
   and MODIFIED_PROCESS IN ('AUTO_DEMERGE', 'MANUAL_DEMERGE') 
   AND TO_CHAR(BM.BILL_DATE ::date, 'YYYY-MM') = '2020-07' 
   AND PD.original_inv_no IS NOT NULL 
UNION 
select distinct bm.invoice_no, 
                'GST NON HOLD', 
               original_inv_no, 
                (select distinct bill_date 
                   from "CBF".bill_master 
                  where invoice_no = original_inv_no) BILL_DATE, 
                case 
                  WHEN TO_NUMBER(BM.TAX_TOTAL) = 0 THEN 
                   'Y' 
                  ELSE 
                   'N' 
                END TAXABLE_FLAG 
  from "CBF".bill_master BM, "CBF".ADJ_details PD 
where BM.INVOICE_NO = PD.INVOICE_NO 
   AND BM.ID = PD.PROCESS_ID 
   AND TO_CHAR(BM.BILL_DATE ::date, 'YYYY-MM') = '2020-07' 
  and isactive = 'Y' 
   and BM.SERVICE_TYPE <> 'TCLi' 
   and bill_gen_system = 'DEFAULT' 
   AND MODIFIED_PROCESS IS NULL 
   AND TO_NUMBER(AMOUNT) < 0 
   AND BM.BILL_TYPE = 'Production' 
   AND PD.original_cust_gstn <> BM.customer_gstn 
   AND PD.original_pos <> BM.pos_state 
   AND PD.original_tcl_gstn <> BM.tcl_gstn 
UNION 
select distinct bm.invoice_no, 
                'GST NON HOLD', 
                original_inv_no, 
               (select distinct bill_date 
                  from "CBF".bill_master 
                  where invoice_no = original_inv_no) BILL_DATE, 
                case 
                  WHEN TO_NUMBER(BM.TAX_TOTAL) = 0 THEN 
                   'Y' 
                  ELSE 
                   'N'
                END TAXABLE_FLAG 
  from "CBF".bill_master BM, "CBF".product_details PD 
where BM.INVOICE_NO = PD.INVOICE_NO 
   AND BM.ID = PD.PROCESS_ID 
   AND TO_CHAR(BM.BILL_DATE ::date, 'YYYY-MM') = '2020-07' 
   and isactive <> 'P' 
   and BM.SERVICE_TYPE <> 'TCLi' 
   and bill_gen_system = 'DEFAULT' 
   and MODIFIED_PROCESS IS NULL 
   AND BM.BILL_TYPE = 'Production' 
   AND PD.original_cust_gstn <> BM.customer_gstn 
   AND PD.original_pos <> BM.pos_state 
   AND PD.original_tcl_gstn <> BM.tcl_gstn 
AND NVL(TO_NUMBER(ONE_TIME_CHARGES), TO_NUMBER(RECURRING_CHARGES)) < 0;'''
...