With an ArrayList<MyRecord> you don't have a good lookup method, so your code is likely doing sequence searches whenever you need to find a record.
If you only ever lookup by one value, e.g. name, then change to HashMap<String, MyRecord>. This will allow direct lookup without need for sequence search.
If you lookup by various values, keep the ArrayList<MyRecord> around, but build multiple maps, one for each lookup field (or set of fields).
The maps are basically the same as indexes in a database.
Now, if data is updated, things are very different. Does an update require you to write the entire file again, immediately? What if the program dies halfway through a write? Databases have built-in guards that help prevent data loss, and will also allow sharing the data among multiple programs running at the same time.