Proc 运行 慢,NOT EXISTS

Proc is running slow with NOT EXISTS

我正在尝试创建一个存储过程,但是我 运行 遇到了一个问题,即由于接近 50k 条记录,存储过程运行超过 5 分钟。

这个过程看起来很简单,我只是不确定为什么要花这么长时间。

基本上我有两个 tables:

Table_1

ApptDate      ApptName          ApptDoc          ApptReason   ApptType
-----------------------------------------------------------------------
03/15/2021    Physical          Dr Smith         Yearly       Day
03/15/2021    Check In          Dr Doe           Check In     Day
03/15/2021    Appt oth          Dr Dee           Check In     Monthly

Table_2 - 这个 table 与 Table_1 具有完全相同的结构,我想要实现的只是存档来自 Table_1[=13 的数据=]

DECLARE @Date_1 as DATETIME 
SET @Date_1 = GetDate() - 1

INSERT INTO Table_2 (ApptDate, ApptName, ApptDoc, ApptReason)
    SELECT ApptDate, ApptName, ApptDoc, ApptReason
    FROM Table_1
    WHERE ApptType = 'Day' AND ApptDate = @Date_1
      AND NOT EXISTS (SELECT 1 FROM Table_2 
                      WHERE AppType = 'Day' AND ApptDate = @Date_1)

所以这个存储过程看起来很简单,但是 NOT EXIST 导致它真的很慢。

NOT EXIST 的原因是此存储过程是一天运行多次(早上、下午、晚上)的更大进程的一部分。我试图确保我只有 1 个“03/15/2021”数据副本。我基本上是 运行 前几天数据的归档过程 (@Date_1)

关于如何“加速”的任何想法。

对于此查询:

INSERT INTO Table_2 (ApptDate, ApptName, ApptDoc, ApptReason)
    SELECT ApptDate, ApptName, ApptDoc, ApptReason
    from Table_1 t1
    Where ApptType = 'Day' and
          ApptDate = @Date_1 and
          NOT EXISTS (Select 1
                      from Table_2 t2
                      where t2.AppType = t1.AppType and
                            t2.ApptDate = t1.ApptDate
                     );

您需要索引:table_1(ApptType),更重要的是,Table_2(AppType, ApptDate)Table_2(ApptDate, AppType)

注意:我将关联子句更改为仅引用外部查询中的值。这似乎比您的版本更通用,但应该具有相同的性能(在本例中)。