2017-08-23 51 views
-1

我有以下mysql查詢來獲取每個賬單的總金額和稅額。Mysql查詢需要大約10分鐘執行

SELECT b.bill_no 
    , b.total_amount 
    , b.created_at 
    , b.id 
    , (SELECT sum(gst_amt) 
     FROM bill_contents_pharmacy bc 
     WHERE bc.bill_id = b.id) as tgst 
    FROM bills b 
WHERE b.bill_type = 'pharmacy' 
    AND cast(b.cr_at as date) >= '2017-08-01' 
    AND cast(b.cr_at as date) <= '2017-08-23' 
    AND b.is_cancelled = 0 
    AND b.is_deleted = 0 
ORDER 
    BY b.bill_no ASC 

這個查詢花費10分鐘左右我的PHP代碼中,但是當我在phpMyAdmin運行它在短短3.6秒完成。我究竟做錯了什麼?

+0

最有可能你不執行完全相同的查詢或不使用相同的數據庫。 –

+0

好,除非你發佈php代碼,我們怎麼能告訴? – rtfm

+0

3.6秒也是如此。你處理了多少條記錄? –

回答

0

你也可以試試這個,你必須在賬單和bill_contents_pharmacy表上創建關係並創建索引。

SELECT b.bill_no, b.total_amount, b.created_at, b.id, sum(bc.gst_amt) as tgst 
FROM bills b 
JOIN bill_contents_pharmacy bc ON bc.bill_id = b.id 
WHERE b.bill_type = 'pharmacy' 
AND cast(b.cr_at as date) >= '2017-08-01' 
AND cast(b.cr_at as date) <= '2017-08-23' 
AND b.is_cancelled = 0 
AND b.is_deleted = 0 
GROUP BY b.bill_no, b.total_amount, b.created_at, b.id 
ORDER BY b.bill_no ASC 

這必須加快查詢

+0

歡迎您NadalAbad –

0

問題似乎是子查詢。嘗試使用連接。

SELECT b.bill_no, b.total_amount,b.created_at, b.id, sum(bc.gst_amt) as tgst 
FROM bills b LEFT JOIN bill_contents_pharmacy bc ON (bc.bill_id = b.id) 
WHERE b.bill_type = 'pharmacy' AND cast(b.cr_at as date) >= '2017-08-01' 
AND cast(b.cr_at as date) <= '2017-08-23' 
AND b.is_cancelled IS FALSE AND b.is_deleted IS FALSE 
GROUP BY b.bill_no, b.total_amount, b.created_at, b.id 
ORDER BY b.bill_no ASC 

此外,鑄造迄今可能沒有必要。

+0

這不能解釋「這個查詢在我的php代碼中花費了大約10分鐘,但是當我運行它時在phpmyadmin它只需要3.6秒。「 – rtfm

+0

其實它可以 – dExIT

相關問題