ATTACH DATABASE command to aggregate from multiple D1.
Indexes will add an additional written row when writes include the indexed column, as there are two rows written: one to the table itself, and one to the index. The performance benefit of an index and reduction in rows read will, in nearly all cases, offset this additional write.

d1.batch call in the next query? I'm worried that sending a read query to find a specific row, waiting for the results in JS, and then sending a write query may end up with 2 workers trying to edit the same row.SELECT query into my UPDATE query and using LIMIT 1 so I can do everything in a single query.
ATTACH DATABASEd1.batchUPDATELIMIT 1