You are right, update is a far from optimal operation in the current implementation. In fact, it's even worse than you've described, because all related objects are updated too. So for a single object, not only all its columns are updated but also all columns of all its related objects even if they didn't change.
I don't have plans to optimize it, simply because I don't know what the best way to do that is. I can see two solutions: 1\. Before updating, run select and compare the two objects. See which fields changed and generate a selective update. This solution means that an extra query is performed for each update query, which pays off with large DBs but imposes redundant overhead for smaller ones. But since we're doing extra queries to update related objects, it may be not a bad solution. 2\. Override field assignment to track which fields were updated, store that information, and use it to generate a selective update. This is quite optimal but assignment is not the only way to modify an object, so it may now cover all cases. Also, it requires some additional state, I don't like that. Feel free to create an issue and suggest solutions. This is a potentially major bottleneck. PRs are welcome too.
