I think it would be best to recreate the table (create a similar structure witj tmp_xxx prefixed to the actual name of the table) and then insert only the rows needed on the new table. Then once the new table has all the needed rows, recreate all indexes and fks from the new table, rename the table, then drop the old one. It's slower to do a batch of deletes when there's only a small set of data needed to remain on the table...