I said this before but never saw a response... Just put your delete inside a select loop so it will always be interruptable. I assume you are talking about writing your own code in C or such? So rather than DELETE FROM TABLE WHERE datetime < oldtime; Do this; SELECT datetime from TABLE where datetime < oldtime; BEGIN for each record DELETE FROM TABLE where datetime=thistime; COMMIT I don't know how distinct your datetime values are...this delete could delete multiple records at once which would be OK. One other possibility is to break out your delete statements like this: DELETE FROM TABLE WHERE datetime < oldtime AND ((datetime % 100)=0) DELETE FROM TABLE WHERE datetime < oldtime AND ((datetime % 100)=1) DELETE FROM TABLE WHERE datetime < oldtime AND ((datetime % 100)=2) DELETE FROM TABLE WHERE datetime < oldtime AND ((datetime % 100)=3) ... So each delete would be approx 100 times faster and would allow interruption inbetween deletes. Michael D. Black Senior Scientist Advanced Analytics Directorate Northrop Grumman Information Systems
________________________________ From: sqlite-users-boun...@sqlite.org on behalf of Michele Pradella Sent: Mon 10/11/2010 4:56 AM To: General Discussion of SQLite Database Subject: EXTERNAL:Re: [sqlite] Speed up DELETE of a lot of records I know that in this use case UPDATE is lither than DELETE, but if I make a DELETE at 4am I can have the DB locked for a lot of time at 4am: I'm only shift the problem. It's not a problem of interface efficiency for user experience: the goal is to make the system always reactive without slow down all the other DB operation. Il 11/10/2010 11.46, Simon Slavin ha scritto: > On 11 Oct 2010, at 10:26am, Michele Pradella wrote: > >> Soft delete could increase the SELECT speed because you have to check >> always for the "deleted" column. >> Moreover the DB will grow up without limit if no one physically delete >> the records: anyway UPDATE of a lot of records could be expensive too. >> I think the only way is to DELETE more frequently less records. > I recommend that you try it. At least in the command-line application if not > in your own code. Deleting a record is very expensive in terms of time and > resources. Changing a field from a 1 to a 0 is far cheaper and faster, even > if it's in an index or two. > > You can have a regular task that runs at 4am that deletes all the records > with a 0 in. That bit is easy. > > Simon. > _______________________________________________ > sqlite-users mailing list > sqlite-users@sqlite.org > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users > > -- Selea s.r.l. Michele Pradella R&D SELEA s.r.l. Via Aldo Moro 69 Italy - 46019 Cicognara (MN) Tel +39 0375 889091 Fax +39 0375 889080 *michele.prade...@selea.com* <mailto:michele.prade...@selea.com> *http://www.selea.com* <http://www.selea.com*/> _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
_______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users