2012-12-14 68 views
0

我一直在根据他们的时间戳从我的数据库中删除记录。while循环和毫秒

我的查询是简单

delete from calldetailrecord where StartTime between 1262321999000 AND 1309492799000; 

1262321999000 =星期四2009年12月31日23:59:59 GMT-0500(美国东部标准时间)

1296449999000 =太阳2011年1月30日23:59:59 GMT -0500(东部标准时间)

对于毫秒,我用:

http://www.ruddwire.com/handy-code/date-to-millisecond-calculators/,使我的计算

我不知道如何做一个while循环来逐月删除数据,并在没有更多数据时停止。

+4

为什么你在这里需要一个循环? – 2012-12-14 19:30:35

回答

2

我不知道如何可以使while循环按月删除月,当有没有更多的数据将停止。

如果要从表中删除所有数据,请使用truncate命令。

truncate calldetailrecord; 

简单单delete会做到这一点

delete from calldetailrecord; 
+0

删除明显比截断慢。 – Woot4Moo

0

我觉得这种方式,您将得到更好的性能:

Create table new_table as select * calldetailrecord where StartTime > 1309492799000 

drop table calldetailrecord; 
alter table new_table rename to calldetailrecord; 

这得到周围由行做一排的问题删除,这将是超级慢。

+0

不是每个人都拥有'drop','create','alter'特权。通常用户具有“插入”,“更新”,“删除”和“选择”权限。 –

+0

@ shiplu.mokadd.im如果这就是至少可以说独一无二的投票原因。合适的DBA肯定不应允许用户修改需要备份/存档的数据。一个好的DBA也不应该强迫开发人员使用低效率的方法来完成任务。 – Woot4Moo

+0

@ shiplu.mokadd.im用户通常没有删除权限,您必须在非常“松散”的环境中工作。 – Woot4Moo

0

看起来像你想做选择性删除。 首先准备好要删除的时间段,生成单个查询并运行它。

DELETE FROM calldetailrecord WHERE StartTime BETWEEN 1353897342 AND 1353897592 OR StartTime BETWEEN 1353897754 AND 1353897764; 

您应该尽可能使用db的最小连接。