Depending on the size of your database and the number of constraints that have to be checked when deleting a row, deletes can take a very, very long time. I never delete more than one row at a time from my databases. It's just too resource-intensive on the system. This is one of the few places where a cursor, or an iteration in non-database code (C#, Java, whatever) can beat a set-based query. I even put a small delay of a few milliseconds between deletes to make sure nothing gets locked up for too long. You can bring a database to its knees by deleting a range of data from a table.