2012-08-24 178 views
-1

我有一个需要很长时间执行的查询。我曾尝试在每张桌上玩索引,但仍然需要很长时间。有没有其他的方法来优化这个查询?优化SQL查询

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

尝试将Table_1.Phone IN ....替换为Table_1.Phone = Table_3.Phone上的另一个连接 –

回答

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