我有一个包含我的应用程序日志的表,它有 161.626.718 行(并且还在增长),并且在其上进行插入非常慢。我的想法是只保留表中 6 个月的日志和所有我想复制到应用程序无法访问的存档表上的旧记录,如果有人需要一些信息,只需直接在表上进行选择。因此,我们的想法是创建这样的日常工作:
SELECT * INTO audlog_backup FROM audlog WHERE XDATE <= DATEADD(day,-185,GETDATE())
DELETE FROM audlog WHERE XDATE <= DATEADD(day,-185,GETDATE())
Run Code Online (Sandbox Code Playgroud)
但是由于表的大小,这将花费很长时间,并且在第一次运行时会减慢甚至锁定数据库一段时间,毕竟大多数行将超过 6 个月。
第一次尽可能安全和快速地做这件事的建议是什么?
更多信息:
SQL Server 2012 标准版
创建表的脚本:
CREATE TABLE [dbo].[audlog_backup](
[PVKEY] [float] NULL,
[DKEY] [varchar](14) NULL,
[XDATE] [datetime] NULL,
[XTIME] [varchar](8) NULL,
[XFROM] [varchar](50) NULL,
[XTO] [varchar](50) NULL,
[DETAILS] [text] NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
SET ANSI_PADDING ON
ALTER TABLE [dbo].[audlog_backup] ADD [XUSER] [varchar](50) NULL
ALTER TABLE [dbo].[audlog_backup] ADD [PEOPLEKEY] [int] NULL
ALTER TABLE …Run Code Online (Sandbox Code Playgroud)