删除存在的地方
Delete Where Exists
delete from VA_demo_setup_NCSC_temp
where exists
(select *
from VA_demo_setup_enrolled va
where VA_demo_setup_NCSC_temp.student_id = va.student_id
and VA_demo_setup_NCSC_temp.academic_period = va.academic_period);
我看过一些与此类似的帖子,但我无法理解为什么这个特定的查询需要几个小时。我正在尝试删除两个数据集中都有 id 和 period 的记录。
如果我们看到了您的 table 结构和索引,就会更容易解释性能不佳的原因。但是,您的查询可以重写如下。您可能会发现它以这种方式执行得更好,这是按照您需要的方式删除数据的更标准方法。
DELETE vt
FROM VA_demo_setup_NCSC_temp vt
INNER JOIN VA_demo_setup_enrolled va ON vt.student_id = va.student_id AND vt.academic_period = va.academic_period;
也许您在 VA_demo_setup_NCSC_temp table 上有一个由 UNIQUEIDENTIFIER 组成的主键? (在这种情况下,重写的查询不会改变性能)
delete from VA_demo_setup_NCSC_temp
where exists
(select *
from VA_demo_setup_enrolled va
where VA_demo_setup_NCSC_temp.student_id = va.student_id
and VA_demo_setup_NCSC_temp.academic_period = va.academic_period);
我看过一些与此类似的帖子,但我无法理解为什么这个特定的查询需要几个小时。我正在尝试删除两个数据集中都有 id 和 period 的记录。
如果我们看到了您的 table 结构和索引,就会更容易解释性能不佳的原因。但是,您的查询可以重写如下。您可能会发现它以这种方式执行得更好,这是按照您需要的方式删除数据的更标准方法。
DELETE vt
FROM VA_demo_setup_NCSC_temp vt
INNER JOIN VA_demo_setup_enrolled va ON vt.student_id = va.student_id AND vt.academic_period = va.academic_period;
也许您在 VA_demo_setup_NCSC_temp table 上有一个由 UNIQUEIDENTIFIER 组成的主键? (在这种情况下,重写的查询不会改变性能)