[英]How to improve the performance of SQL Query with Group-By?
我需要以下查詢的替代查詢(以提高查詢性能)-
;WITH products as (SELECT DISTINCT Id3 FROM Table1 WHERE id ='abcd-1234-adfasd')
SELECT t2.TransactionId ,count(t2.TransactionId)
FROM Table2 AS t2
inner JOIN products AS p ON (t2.Id3 = p.Id3)
WHERE ( (t2.Id1 != 'ggg-bbbccc-ttt')
AND (t2.CreatedTime > '2016-10-12T12:21:37.5088739')AND (t2.CreatedTime <= '2016-10-12T12:23:17.7377845')) AND (t2.Id2=2)
GROUP BY t2.TransactionId
ORDER BY TransactionId
在上面的查詢中count(t2.TransactionId)沒有給出正確的結果,為此我將其替換為下面的子查詢-
SELECT t2.TransactionId ,(select count(1) from Table2 where TransactionId = t2.TransactionId) as trunacount
FROM Table2 AS t2
inner JOIN products AS p ON (t2.Id3 = p.Id3)
WHERE ( (t2.Id1 != 'ggg-bbbccc-ttt')
AND (t2.CreatedTime > '2016-10-12T12:21:37.5088739')AND (t2.CreatedTime <= '2016-10-12T12:23:17.7377845')) AND (t2.Id2=2)
GROUP BY t2.TransactionId
ORDER BY TransactionId
上面的查詢給出了正確的結果,但是與第一次查詢相比花費了一些時間。 因此,我需要一種可以在更少的時間內獲得TransactionId計數的方法。
下面是Table2的表結構(Table2中沒有主鍵)-
您正在使用與計數相關的子查詢列。 我認為這可能會導致性能問題。 因為與Co相關的子查詢將比較內部集的每個記錄和外部集的每個記錄。 我的建議是將其替換為LEFT JOIN。
SELECT T2.TRANSACTIONID ,TRANS_COUNT.TRANSAC_COUNT AS TRUNACOUNT
FROM TABLE2 AS T2
INNER JOIN PRODUCTS AS P ON (T2.ID3 = P.ID3)
LEFT JOIN
(
SELECT TRANSACTIONID, COUNT(1) TRANSAC_COUNT FROM TABLE2 GROUP BY TRANSACTIONID
) AS TRANS_COUNT ON T2.TRANSACTIONID = TRANS_COUNT.TRANSACTIONID
WHERE ( (T2.ID1 != 'GGG-BBBCCC-TTT')
AND (T2.CREATEDTIME > '2016-10-12T12:21:37.5088739')
AND (T2.CREATEDTIME <= '2016-10-12T12:23:17.7377845')) AND (T2.ID2=2)
GROUP BY T2.TRANSACTIONID
ORDER BY TRANSACTIONID
如果仍然存在性能滯后,則可以僅將純數據提取到表變量(插入)中,然后可以對該單個集合(表變量)進行計數,分組依據和不同。
希望這對您有幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.