So on the query plan for the update from, I think you're correct, in the case of an equality constraint on "name" the code was: ``` info->estimatedRows = 1; info->idxFlags = SQLITE_INDEX_SCAN_UNIQUE; ``` Adding ``` info->estimatedCost = 1; ``` Causes it to use an alternate query plan as I now only get this output from xColumn, so it's not doing a full scan any more. ``` sqlite3_vtab_nochange for column 0 returned false sqlite3_vtab_nochange for column 0 returned false sqlite3_vtab_nochange for column 0 returned false sqlite3_vtab_nochange for column 1 returned false ``` I think when we wrote this, we may have mistakenly thought we didn't have to set the cost as saying there was one row would be enough - clearly not! I have raised an issue to review our other table implementations, it's really useful we've caught that, thanks! Hopefully we'll hear from one of the devs soon on the sqlite_vtab_nochange issue.