1 - Assume you have 10 groups loaded into a post list and this spam is posted to all 10 groups.
2 - You select 100 of these and shift-delete.
3 - Newsbin will collect the unique ID up for each crosspost and note each group. Each group has a unique ID for crossposts so, 10 groups, 10 crossposts = 10 ID's per post. One per group).
4 - Newsbin hands this information off to a worker thread.
5 - It partitions the data by group.
6 - It opens one group, starts a transaction, deletes 2-3 records per selected line set so, call is 200-300 deletes if you started with 100 selected posts. .
7 - Repeats 6 with a new group until all records have been deleted.
What I'm describing is worst case. Typically you don't have that many groups loaded and you don't have so many crossposts.
You can watch it work with procmon.
"Delete all Posts by Poster" is pretty effective too.
The problem wouldn't be so bad if it remembered the to-be-deleted-but-not-yet-deleted headers between sessions.
Leave it running till it's done.