Wait... so you are telling me that while SQLite already READs the entire row, it then does NOT check the fields individually to decide if it has to actually do a write or not? It just blindly rewrites the row regardless because checking takes effort? (more than write IO?) I find it hard to believe, and if it is true, surely there is a huge opportunity for optimization here. And if it does check - then the point is moot about the effort of evaluating all the fields, because it already happens. One of these two things must be false.