Right, Igor.

We can eliminate the middle-column issue :

... where basename GLOB 'a'    // no index
... where basename GLOB 'a*'   // index used


Regards
Tim Romano


On Sun, Apr 11, 2010 at 8:43 AM, Igor Tandetnik <itandet...@mvps.org> wrote:

> Tim Romano wrote:
> > I believe the behavior is expected and believe (subject to correction)
> that
> > the single composite index is placed on a concatenation of the three
> column
> > values   (basename + extension + path).  I don't know how the internals
> of
> > SQLite work never having explored the code, but in situations like yours,
> > where you want to do substring queries on each of the three columns that
> > comprise your "full path", I would normally create three separate indexes
> > rather than a single composite index.  I am guessing that when you  look
> for
> > rows where column 'extension' starts with 'b' (column 'extension' is the
> > middle column of the three-column composite index) you are running into a
> > scenario analogous to .... where someColumn LIKE '%x%'.
>
> Try this:
>
> explain query plan SELECT tb_file_key, basename, extension,
> path FROM tb_file WHERE basename = 'a' AND  extension GLOB 'b*' AND
>  path = 'c';
>
> This query does use the index, and is equivalent to the OP's second query.
> How does your theory explain this case?
> --
> Igor Tandetnik
>
> _______________________________________________
> sqlite-users mailing list
> sqlite-users@sqlite.org
> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
>
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to