Thanks for the explanation. I recall seeing posts suggesting the use of union instead of or, and thought "if it's that easy, why doesn't SQLite do it?" The optimizer documentation says:
--- Suppose the OR clause consists of multiple subterms as follows: expr1 OR expr2 OR expr3 If every subterm of an OR clause is separately indexable and the transformation to an IN operator described above does not apply, then the OR clause is coded so that it logically works the same as the following: rowid IN (SELECT rowid FROM table WHERE expr1 UNION SELECT rowid FROM table WHERE expr2 UNION SELECT rowid FROM table WHERE expr3) The implemention of the OR clause does not really use subqueries. A more efficient internal mechanism is employed. The implementation also works even for tables where the "rowid" column name has been overloaded for other uses and no longer refers to the real rowid. But the essence of the implementation is captured by the statement above: Separate indices are used to find rowids that satisfy each subterm of the OR clause and then the union of those rowids is used to find all matching rows in the database. --- It sounds like it might use indexes for an OR after all. Jim On 5/8/09, Igor Tandetnik <itandet...@mvps.org> wrote: > "Jim Wilcoxson" <pri...@gmail.com> wrote > in message > news:c5830b750905080813p6bf901bn526c81ca8ce7a...@mail.gmail.com >> I don't know if it makes any difference, but is that where clause the >> same as: >> >> WHERE name< 'zUmM' OR (name= 'zUmM' AND S.id< 8122) > > SQLite's optimizer cannot use an index for any condition involving OR. > That's why it's common to write an equivalent but somewhat unnatural > > name <= 'zUmM' AND (name< 'zUmM' OR S.id< 8122) > > This way, at least the first condition has a chance of being satisfied > with an index. > > Igor Tandetnik > > > > _______________________________________________ > sqlite-users mailing list > sqlite-users@sqlite.org > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users > -- Software first. Software lasts! _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users