SQL更新查询有时太慢

问题描述 投票:0回答:1

更新语句时,执行时间有时需要60秒有时需要1-2秒。总行数约为 1800 万。 CARDID是我们的PK。我们的系统几乎每 2-3 秒就会向该查询发送一个请求。您可以在下面找到查询;

    UPDATE C
    SET
        [CARDTYPE]           =  @NEWCARDTYPE,
        [ICPGROUPID]         =  @NEWICPGROUPID,
        [CARDNUMBER]         =  @NEWCARDNUMBER,
        [PINCODE]            =  @NEWPINCODE,
        [SCODE]              =  @NEWSCODE,
        [STATUS]             =  @NEWSTATUS,
        [CUSTOMERID]         =  @NEWCUSTOMERID,
        [PROFILEID]          =  @NEWPROFILEID,
        [BALANCE]            =  @NEWBALANCE,
        [BALANCETYPE]        =  @NEWBALANCETYPE,
        [DECIMALS]           =  @NEWDECIMALS,
        [CURRENCY]           =  @NEWCURRENCY,
        [STARTDATE]          =  @NEWSTARTDATE,
        [EXPIRATIONDATE]     =  @NEWEXPIRATIONDATE,
        [PINCOUNT]           =  @NEWPINCOUNT,
        [PINDATE]            =  @NEWPINDATE,
        [INITIALPIN]         =  @NEWINITIALPIN,
        [INITIALSCODE]       =  @NEWINITIALSCODE,
        [UPDATEDATE]         =  GETDATE(),
        [ACTIVATIONDATE]     =  @NEWACTIVATIONDATE,
        [REGISTERDATE]       =  @NEWREGISTERDATE,
        [UNREGISTERDATE]     =  @NEWUNREGISTERDATE,
        [ORDERID]            =  @NEWORDERID,
        [RELATEDCARD]        =  @NEWRELATEDCARD,
        [LOADCOUNT]          =  @NEWLOADCOUNT,
        [REDEEMCOUNT]        =  @NEWREDEEMCOUNT,
        [ISCHANGED]          =  1,
        [ISPROCESSED]        =  0
    FROM dbo.[CARD] C 
    WHERE
        CARDID = @CARDID

我们在该表上还有一些索引。我们可以做什么?我们真的被困住了。我们又加了一个过滤器,但没有用。

sql-server indexing sql-update clustered-index non-clustered-index
1个回答
0
投票

更新、删除、插入必须更新每个操作的所有索引。根据输入,我只能建议删除除 PK 之外的所有索引,看看是否有帮助。如果它有帮助,但您可能不会删除索引,因为您通过某些选择使用它们,那么您至少知道问题是什么:)也许您真的可以只留下 2-3 个必要的索引。

1800 万行实际上没什么大不了的,特别是如果你通过 id 查询的话。是否有可能多个客户端同时执行此更新查询?这可以解释执行时间的差异。我还建议运行一些分析器,看看服务器上到底发生了什么以及实际的查询执行时间是多少。也许它们速度很快,但问题出在其他地方。

© www.soinside.com 2019 - 2024. All rights reserved.