2012-12-14 69 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的最小連接。