0

我有以下脚本,以前没问题,但是由于我们的用户群现在已经扩展到近一百万成员,所以脚本现在非常缓慢。我想改进它并需要专家帮助来加快速度,可以通过编码更改、创建索引或两者兼而有之。这是代码:

IF @MODE = 'CREATEREQUEST'
    BEGIN
        IF NOT EXISTS (SELECT * FROM FriendRequest WHERE FromMemberID = @FromMemberID AND ToMemberID = @ToMemberID) 
        AND NOT EXISTS (SELECT * FROM MemberConnection WHERE MemberID = @FromMemberID AND ConnMemberID = @ToMemberID)
        AND NOT EXISTS (SELECT * FROM MemberConnection WHERE MemberID = @ToMemberID AND ConnMemberID = @FromMemberID)

        BEGIN
            INSERT INTO FriendRequest (
                FromMemberID,
                ToMemberID,
                RequestMsg,
                OnHold)
            VALUES (
                @FromMemberID,
                @ToMemberID,
                @RequestMsg,
                @OnHold)
        END
        BEGIN
            UPDATE Member SET FriendRequestCount = (FriendRequestCount + 1) WHERE MemberID = @ToMemberID
        END
END

您能提供的任何帮助将不胜感激。

4

1 回答 1

1

您可以使用 SQL Server Management Studio 查看表上的索引。例如,如果您的 FriendRequest 表在 FriendRequestID 上有一个 PK,您将能够看到您在该字段上有一个聚集索引。每个表只能有一个聚集索引,并且表记录按该顺序存储。

您可能想尝试将非聚集索引添加到外键字段。您可以使用新建索引向导,或者像这样的语法:

CREATE NONCLUSTERED INDEX [IX_FromMemberID] ON [dbo].[FriendRequest] (FromMemberID)
CREATE NONCLUSTERED INDEX [IX_ToMemberID] ON [dbo].[FriendRequest] (ToMemberID)

但是您应该知道,索引通常会减慢您在代码中显示的 INSERT 和 UPDATE 操作。它通常会加速可以使用索引字段的 SELECT 查询(请参阅执行计划)。

您可以尝试使用数据库引擎优化顾问来了解一些可能的索引及其对应用程序工作负载的影响。

索引是一个很大的主题,您可能希望一次迈出一小步。

于 2013-04-15T17:52:03.480 回答