Interesting and thanks for that tip.
Is there a performance penalty from structuring the
query like that? I take it that there will be.

RBS


> Martin Pelletier <[EMAIL PROTECTED]> wrote:
>> This is news to me. Why can't SQlite use more than one index?
>>
>
> It can.  You just have to tell it to explicitly by restructuring
> your SQL.
>
> As an example, consider this query:
>
>
>      SELECT * FROM table1 WHERE a=5 AND b=11;
>
> Suppose there are two indices:
>
>      CREATE INDEX index1 ON table1(a);
>      CREATE INDEX index2 ON table1(b);
>
> As written, SQLite will only use one of these two indices
> to perform the query.  The choice is arbitrary (unless you
> have run ANALYZE and SQLite has some information to help it
> pick the "best" index.)
>
> If you want to use both indices, rewrite the query this
> way:
>
>      SELECT * FROM table1 WHERE rowid IN
>          (SELECT rowid FROM table1 WHERE a=5
>            INTERSECT SELECT rowid FROM table1 WHERE b=11);
>
> The optimizer in PostgreSQL will make this change for you
> automatically and will use a bitmap to implement the IN
> operator and the INTERSECT.  With SQLite, though, you have to
> type in the expanded version yourself.  And because rowids
> in SQLite are user visible and changeable and can thus be
> diffuse, SQLite is unable to use bitmaps to optimize the
> computation.  But modulo the bitmap optimization, SQLite gives
> you all the capabilities of PostgreSQL, you just have to type
> it in yourself rather than letting the optimizer do it for
> you.
>
> --
> D. Richard Hipp <[EMAIL PROTECTED]>
>
>
> -----------------------------------------------------------------------------
> To unsubscribe, send email to [EMAIL PROTECTED]
> -----------------------------------------------------------------------------
>
>
>




-----------------------------------------------------------------------------
To unsubscribe, send email to [EMAIL PROTECTED]
-----------------------------------------------------------------------------

Reply via email to