2017-03-07 70 views
0

我的查詢執行時間太長。請幫我簡化一下? 這裏是我的查詢:如何簡化SQL選擇命令

 SELECT uid,etop_id,SUM(amount) AS amt, 
        (SELECT m_name FROM member_details WHERE etop_id=a.etop_id) AS m_name, 
        (SELECT SUM(amount) FROM hidden_charges WHERE etop_id=a.etop_id 

    AND entry_date BETWEEN @date1 AND @date2 AND particular IS NULL 
        ) AS hidden, 
        (SELECT (SUM(credit)-SUM(debit)) 
         FROM member_transaction 
         WHERE member_id=a.uid 
         AND is_succeed=1 
         AND isnull(reference_id,0) NOT IN(SELECT 
user_reference_id FROM recharge_request WHERE status=7) 
        ) AS balance, 
        ( SELECT TOP 1 credit 
         FROM member_transaction 
         WHERE member_id=a.uid 
         AND credit>0 
         AND entry_date=(SELECT MAX(entry_date) 
             FROM member_transaction 
             WHERE member_id=a.uid AND credit>0)) AS credit 
      FROM recharge_request a WHERE status=1 AND rdate BETWEEN @date1 AND @date2 
      GROUP BY etop_id, uid ORDER BY amt DESC 
+1

您是否知道可能的sql注入? – Andreas

+0

是的,我用參數替換文本框。 –

+0

@AmitMishra。 。 。通過刪除子句來簡化查詢,找出需要花費的時間。然後用簡化查詢問另一個問題。 –

回答

0

對於大型查詢我傾向於數據彈出到一個臨時表,並用它來查詢。

Select * 
Into #Table 
From member_transaction 
Where member_id=a.uid 

然後只是查詢#Table而不是member_transaction,應該加快速度。