Enhancements to the code generator for the IN operator that result in much

faster queries in some cases, for example when the RHS of the IN operator
changes for each row of a large table scan.

FossilOrigin-Name: 436e884215e2b33ca3fbb555362237b12827c07a
This commit is contained in:
drh
2014-08-02 21:03:33 +00:00
parent 16d511a664
commit bb53ecb1db
6 changed files with 165 additions and 69 deletions
+4 -2
View File
@@ -3598,11 +3598,13 @@ const char *sqlite3JournalModename(int);
#define IN_INDEX_EPH 2 /* Search an ephemeral b-tree */
#define IN_INDEX_INDEX_ASC 3 /* Existing index ASCENDING */
#define IN_INDEX_INDEX_DESC 4 /* Existing index DESCENDING */
#define IN_INDEX_NOOP 5 /* No table available. Use comparisons */
/*
** Allowed flags for the 3rd parameter to sqlite3FindInIndex().
*/
#define IN_INDEX_MEMBERSHIP 0x0001 /* IN operator used for membership test */
#define IN_INDEX_LOOP 0x0002 /* IN operator used as a loop */
#define IN_INDEX_NOOP_OK 0x0001 /* OK to return IN_INDEX_NOOP */
#define IN_INDEX_MEMBERSHIP 0x0002 /* IN operator used for membership test */
#define IN_INDEX_LOOP 0x0004 /* IN operator used as a loop */
int sqlite3FindInIndex(Parse *, Expr *, u32, int*);
#ifdef SQLITE_ENABLE_ATOMIC_WRITE