千万级数据表删数据

zhangweitc123 2015-12-04 03:10:40

contents time ip
410048 2015-11-01 00:00:03.900 /122.96.46.175:61337
410048 2015-11-01 00:00:23.950 /122.96.46.175:61337
410048 2015-11-01 00:00:52.323 /122.96.46.175:61337
410048 2015-11-01 00:01:12.357 /122.96.46.175:61337
410048 2015-11-01 00:01:32.450 /122.96.46.175:61337
410048 2015-11-01 00:01:52.497 /122.96.46.175:61337
410048 2015-11-01 00:02:12.603 /122.96.46.175:61337
410048 2015-11-01 00:02:32.637 /122.96.46.175:61337
410048 2015-11-01 00:02:52.723 /122.96.46.175:61337
410048 2015-11-01 00:03:12.773 /122.96.46.175:61337
410048 2015-11-01 00:03:32.850 /122.96.46.175:61337

现在在一张表中有两千多万数据,类似于这种的数据,现在只是查出contents=‘410048’的数据,还有其他的,比如410049等等,现在大约是每20秒增加一条数据。现在就想删除数据,保留3分钟内时间最小的数据,结果如下

contents time ip
410048 2015-11-01 00:00:03.900 /122.96.46.175:61337
410048 2015-11-01 00:03:12.773 /122.96.46.175:61337
410048 2015-11-01 00:06:16.580 /122.96.46.175:61337
410066 2015-11-01 00:00:55.260 /122.96.46.165:61337
410066 2015-11-01 00:03:59.317 /122.96.46.165:61337

请问这个应该如何处理,要写存储过程吗,怎么写呢。
...全文
324 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangweitc123 2015-12-04
  • 打赏
  • 举报
回复
引用 1 楼 wmxcn2000 的回复:
建立一个作业,每3 分钟执行一次,删除 3 分之前的,看看效率怎么样,不行的话,再想别的办法。
啥是作业啊,没写过
zhangweitc123 2015-12-04
  • 打赏
  • 举报
回复
引用 2 楼 yenange 的回复:
要删除几千万的数据, 产生的日志不可小看了。 还不如将要保留的数据弄到新表, 旧表保留备份数据。 类似我下面操作就好, 也许生产环境一两秒受影响,但一劳永逸。 如果按你的做法可能生产环境半小时也未必能正常运转。
--0. 准备测试表及测试数据
IF OBJECT_ID('dbo.T1','U') IS NOT NULL
	DROP TABLE dbo.T1
GO
IF OBJECT_ID('dbo.T1_old','U') IS NOT NULL
	DROP TABLE dbo.T1_old
GO
CREATE TABLE dbo.T1(
	id INT,
	d DATETIME,
	CONSTRAINT PK_T1 PRIMARY KEY(
		id ASC	
	)
)
GO
INSERT INTO T1(ID,d) VALUES(1, DATEADD(mm, -30, GETDATE()))
INSERT INTO T1(ID,d) VALUES(2, GETDATE())
GO
--1. 原表改名
EXEC sp_rename 'T1', 'T1_old'
GO
--2. 原表中的部分数据插入到新表; 旧表中删除新表有的数据
SELECT * INTO T1 FROM T1_old WHERE d>DATEADD(mm, -30, GETDATE())
DELETE FROM T1_old FROM T1 WHERE T1_old.id=t1.id
GO
--3. 新表加上主键约束
ALTER TABLE T1 ADD CONSTRAINT PK_T1_new PRIMARY KEY (id)
--4. 查看旧表与新表
SELECT * FROM T1
SELECT * FROM T1_old
 
现在不知道咋写出哪个查询语句了,想好好久,还没考虑到删除的事情
吉普赛的歌 2015-12-04
  • 打赏
  • 举报
回复
要删除几千万的数据, 产生的日志不可小看了。 还不如将要保留的数据弄到新表, 旧表保留备份数据。 类似我下面操作就好, 也许生产环境一两秒受影响,但一劳永逸。 如果按你的做法可能生产环境半小时也未必能正常运转。
--0. 准备测试表及测试数据
IF OBJECT_ID('dbo.T1','U') IS NOT NULL
	DROP TABLE dbo.T1
GO
IF OBJECT_ID('dbo.T1_old','U') IS NOT NULL
	DROP TABLE dbo.T1_old
GO
CREATE TABLE dbo.T1(
	id INT,
	d DATETIME,
	CONSTRAINT PK_T1 PRIMARY KEY(
		id ASC	
	)
)
GO
INSERT INTO T1(ID,d) VALUES(1, DATEADD(mm, -30, GETDATE()))
INSERT INTO T1(ID,d) VALUES(2, GETDATE())
GO
--1. 原表改名
EXEC sp_rename 'T1', 'T1_old'
GO
--2. 原表中的部分数据插入到新表; 旧表中删除新表有的数据
SELECT * INTO T1 FROM T1_old WHERE d>DATEADD(mm, -30, GETDATE())
DELETE FROM T1_old FROM T1 WHERE T1_old.id=t1.id
GO
--3. 新表加上主键约束
ALTER TABLE T1 ADD CONSTRAINT PK_T1_new PRIMARY KEY (id)
--4. 查看旧表与新表
SELECT * FROM T1
SELECT * FROM T1_old
 
卖水果的net 2015-12-04
  • 打赏
  • 举报
回复
建立一个作业,每3 分钟执行一次,删除 3 分之前的,看看效率怎么样,不行的话,再想别的办法。

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧