我的查询需要很长时间才能执行。我试过在每张桌子上玩索引,但它仍然需要很长时间。有没有其他方法可以优化此查询?
SELECT tblDLM.Phone
FROM (SELECT Table1.Phone,
Count(Table_1.T1ID) AS CountOfT1ID
FROM Table_1
INNER JOIN Table_2
ON Table_1.SubscriptionID = Table_2.SubscriptionID
WHERE ( ( Table_1.MsgType ) = 'coupon' )
AND (( ( Table_1.Phone ) IN (SELECT DISTINCT Table_3.Phone
FROM Table_3
WHERE Table_3.DeliveryStatus <> 0
AND Table1.Phone = Table_3.Phone)
AND CampaignID <> Cast(@intCampaignIDTemp AS NVARCHAR(50)) ))
GROUP BY Table_1.Phone,
Table_2.MasterServiceID
HAVING Table_2.MasterServiceID = 121) tblDLM
WHERE CountOfT1ID >= 3
感谢。
答案 0 :(得分:2)
试试这个:
修改强>
你真的需要GROUP BY Table_1.Phone, Table_2.MasterServiceID
吗?
DECLARE @nvarcharCampaignIDTemp NVARCHAR(50);
SET @nvarcharCampaignIDTemp = Cast(@intCampaignIDTemp AS NVARCHAR(50));
SELECT
Table1.Phone
FROM
Table_1
INNER JOIN Table_2
ON Table_1.SubscriptionID = Table_2.SubscriptionID
INNER JOIN Table_3
ON Table1.Phone = Table_3.Phone
WHERE
Table_1.MsgType = 'coupon'
AND Table_2.MasterServiceID = 121
AND CampaignID <> @nvarcharCampaignIDTemp
AND Table_3.DeliveryStatus <> 0
AND Count(DISTINCT Table_1.T1ID) >= 3