Mike Goins wrote:
> Using the latest binary, sqlite3-3.6.23.1.bin.gz
> 
> sqlite> CREATE TABLE tb_file (tb_file_key INTEGER NOT NULL PRIMARY KEY
> AUTOINCREMENT , basename TEXT, extension TEXT, path TEXT, deleted
> INTEGER default 0 );
> sqlite> CREATE INDEX fullpath_idx on tb_file (basename, extension, path);
> sqlite> INSERT INTO tb_file (basename, extension, path) VALUES ('a', 'b', 
> 'c');
> sqlite> select * from tb_file;
> tb_f  basename       exte  path  dele
> ----  -------------  ----  ----  ----
> 1     a              b     c     0
> 
> sqlite> explain query plan SELECT tb_file_key, basename, extension,
> path FROM tb_file WHERE basename GLOB 'a*' AND  extension GLOB 'b' AND
> path GLOB 'c';
> orde  from           deta
> ----  -------------  ----
> 0     0              TABLE tb_file WITH INDEX fullpath_idx
> sqlite> explain query plan SELECT tb_file_key, basename, extension,
> path FROM tb_file WHERE basename GLOB 'a' AND  extension GLOB 'b*' AND
> path GLOB 'c';
> orde  from           deta
> ----  -------------  ----
> 0     0              TABLE tb_file USING PRIMARY KEY ORDER BY

I don't know why "basename GLOB 'a' " doesn't get optimized. There is no reason 
not to, and the documentation suggests that it should. Could be a bug.

Note that "basename GLOB 'a' " is equivalent to "basename='a' ". Can you 
rewrite your statements replacing GLOBs with equality tests where possible? 
Then the index is indeed used.
-- 
Igor Tandetnik

_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to