Oh yeah, sorry I wasn't thinking too clearly last night. Yeah, it is going to load up every row in the table (subject to pre-filters) even if you have a batch size set, and it's only going to process the batch count.
Notes to self / thinking out loud ...
I think I need to do a little more work on it. Cron plugins can disable automatic loading of the table, with the requiresTableData() method, which tells the main plugin model not to load it. Which is what this plugin did until last night, and I had some code which just did a manual query to load the main table, rather than calling the $listModel->getData() ... but that didn't load any joins, which was breaking the test I was doing, which used join/CDD for state/city ...
Anyway ... I think what I probably need to do is if the "geocode when ..." is not set to "always", i.e. if it's set to only process "empty" fields, handle the table loading inside the plugin itself, and make the batch size compulsory. Then I can do a query like "WHERE map_element IS NULL OR map_element = 'xxxxx' LIMIT y" (where xxxx is the defined default value and y is the batch size).
That way, the plugin could gradually work through an extremely large table, without selecting all the rows, and just processing the first X (batch size) empty rows on each run.
But if "always" is set for "geocode when", just let the main model select all rows, ad process all rows. It'd be up to the user to only do that on small tables.
-- hugh