我有通知表(非常大的表),我需要你的帮助以下方案
1-选择用户ID的所有通知
2-在notification_log表中插入这些通知
3-从通知表中删除所有这些通知
我的想法:
1-在通知表中创建标志列并在其上创建更新触发器以执行上述方案中的步骤2和3.
缺点:触发同谋o(n),我总是选择大量通知,因此效果不佳
2-创建简单的sql过程来执行上面的场景
缺点:如果方案的步骤未能提交整个过程将会回滚
你可以帮我优化一下。提前致谢
答案 0 :(得分:1)
INSERT ... SELECT ...; DELETE ...;
上没有太多可能失败,所以我肯定会使用存储过程。
此外,有一些选项可以使整个过程更快(暂时删除索引和约束等),但这不是你所问的: - )
答案 1 :(得分:0)
我认为你应该采用简单的程序。
以下是您应遵循的步骤。
1)在通知表中的user_id上创建索引。 2)用光标写程序。 3)收集游标中的所有user_id并迭代。 4)使用来自游标的user_id从通知中选择所有行。 5)在notification_log表中插入这些行。 6)从通知栏中删除插入的列。
注意: - 成功执行过程后,不要在notification_log表上添加任何外键或索引,然后添加所需的外键和索引。