WITHOUT ROWID simply uses another typically heavier Index as the primary key in stead of the rowid. Unless this index is *also* an INTEGER PK it is guaranteed to be slower, and if it *is* an Integer PK, it should be close to the same speed as the row id, but possibly still marginally slower. The WITHOUT ROWID optimization is really a space-saver where another PK must be present anyway. It should not be any faster[1]. Put it like this: If that was faster, the devs should immediately implement that as the new row_id mechanism! [1] Note: If the without rowid optimization replaces a previous duo of row_id + PK to now only have the PK, then it is bound to be faster, but simply replacing a rowid with a previously non-existing PK, can never be faster.