You can use queries for that as well. You can specify your parameters as you normally would OR leave the macros in the query i.e.: ##WHERE##
and simply pass that parameter to the query. Doing what I'm suggesting is exactly what you're doing although not hard coding the query in code.
Each time you use the built-in methods for a custom table (insert, update, delete), it also creates a record in the event log of the action that happened. So there is overhead with those methods. To get away from that, you can simply create your queries, call them from code and pass your data to them. As I mentioned, the .Delete, .Insert, etc. methods, perform additional checks and queries which is why they typically take longer.
I use scheduled tasks for this on a regular basis with a lot of clients anywhere from a couple hundred rows of data to a million and if you run your scheduler as a service on the server, it works great. If you're using the site to run the scheduler, then you could see some performance issues depending on what else is going on at the time it runs.
You might also consider doing a TRUNCATE to the table vs. just deleting a range and re-importing all the data, could also help with performance.