Tomash Brechko <[EMAIL PROTECTED]> wrote: > > sqlite> .explain > sqlite> explain SELECT * FROM People where GUID in ("ABC", "RDT", "TUV"); > addr opcode p1 p2 p3 > ---- -------------- ---------- ---------- ------------------- > .... > 2 OpenRead 0 6 > .... > 5 MemLoad 0 0 > .... > 8 OpenEphemeral 1 0 keyinfo(1,BINARY) > 9 SetNumColumns 1 1 > 10 String8 0 0 ABC > 11 MakeRecord 1 0 b > 12 IdxInsert 1 0 > 13 String8 0 0 RDT > 14 MakeRecord 1 0 b > 15 IdxInsert 1 0 > 16 String8 0 0 TUV > 17 MakeRecord 1 0 b > 18 IdxInsert 1 0 > .... > 26 Found 1 28 > .... > 30 Callback 1 0 > 31 Next 0 5 > .... > > > See, at instruction 8 a temporary table (or rather index) is created, > and values "ABC", "RDT", "TUV" are put into it, so that we can later > use logarithmic search instead of liner search as would be done with > OR chain. > > The problem is that jump at instruction 31 (Next) brings us back to > instruction 5. This means that the query plan is: > > for every row in People do > create temp table > populate temp table > see if current value from People is in temp table > next > > This doesn't look right.
Your interpretation of what is happening isn't right. Look more closely at instructions 5 through 7: 5 MemLoad 0 0 6 If 0 19 7 MemInt 1 0 Memory location 0 is being used as a flag that indicates whether or not the temporary table has been initialized. Instructions 5 and 6 test this flag and skip the initializion if it has already been done. Instruction 7 sets the flag at the beginning of the initialization process. So the pseudocode is really like this: for every row in People do if temp table is uninitialized create temp table populate temp table endif .... endfor For additional insight, use "PRAGMA vdbe_trace=ON" before running the query and see that the temp table initializatio is only done once. -- D. Richard Hipp <[EMAIL PROTECTED]> ----------------------------------------------------------------------------- To unsubscribe, send email to [EMAIL PROTECTED] -----------------------------------------------------------------------------