优化SQL查询

时间:2012-08-24 14:21:19

标签: sql sql-server-2008 query-optimization

我的查询需要很长时间才能执行。我试过在每张桌子上玩索引,但它仍然需要很长时间。有没有其他方法可以优化此查询?

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 

感谢。

1 个答案:

答案 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