Maybe "one index per table instance in the query" is more accurate? What we're saying is that if you have a table t with fields a and b, with an index on a and an index on b, then in... `select * from t where a = 5 or b = 7;` Then SQLite with use only one of those two indexes, or do a full table scan. It will not use the A index for "where a = 5", use the B index for "or b = 7" and then de-duplicate the results. If you have `select * from t as t1 join t as t2 on t1.id1 = t2.id2 where t1.a = 12 or t2.b = 42;` then again for t1 it will use one index or the full table, and for t2 it will use one index or the full table. It can't use an index on t2.id2 to speed up the ON clause and use an index on t2.b to speed up the WHERE and do some cross comparing. It can only pick one. ...or something like that.