简体   繁体   中英

SELECT query take too much time to process

The following MySQL query take too much time. its take 24sec . and total records not more the 15000 each table please guide me for faster

Thanks

select  c1.code,
        ( SELECT  COALESCE(sum(i.total_amount),0)
            FROM  invoice as i
            WHERE  i.customer_code= c1.code
        )-
        ( SELECT  COALESCE(sum(p.amount),0)
            FROM  collection as p
            where  p.customer_code = c1.code
        )-
        ( SELECT  COALESCE(sum(CN.amount),0)
            FROM  cr_note as CN
            where  CN.customer_code= c1.code
        ) as rem_Balance
    from  customer as c1

you make it fast by replacing sub queries to queries with left joins like this:

WITH allInvoice AS (SELECT customer_code AS code, SUM(total_amount) AS amount FROM invoice GROUP BY customer_code),
     allCollection AS (SELECT customer_code AS code, SUM(amount) AS amount FROM collection GROUP BY customer_code),
     allNote AS (SELECT customer_code AS code, SUM(amount) AS amount FROM cr_note GROUP BY customer_code)
SELECT customer.code,
       (COALESCE(allInvoice.amount) - COALESCE(allCollection.amount) - COALESCE(allNote.amount)) AS rem_Balance
FROM customer
         LEFT JOIN allInvoice ON allInvoice.code = customer.code
         LEFT JOIN allCollection ON allCollection.code = customer.code
         LEFT JOIN allNote ON allNote.code = customer.code

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM