GB schrieb am 24.08.2011 19:59:
Hi all,

I have a table like this:

CREATE TABLE t (itemID INTEGER PRIMARY KEY, createdAt DATETIME);
CREATE INDEX createIdx on t(createdAt);

SQLite is compiled using SQLITE_ENABLE_STAT2 and table is ANALYZEd with
current content.

When perfoming a Statement like this:

SELECT itemID FROM t WHERE itemID BETWEEN 1000000 AND 2000000 AND
createdAt BETWEEN '2011-08-01' AND '2011-08-02'

the analyzer always chooses the rowid index which results in a scan over
one million rows. It would have to scan only a few dozen rows if it
chose createIdx instead (which is also a covering index). Looking at the
sqlite_stat2 table shows that there is no data for the rowid index.
Could this be the reason for the suboptimal query plan? The choice works
as expected if itemID is a regular column with an index on it.

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

sorry for replying to myself, but could someone knowledgeable about the query planner statistics comment on this? It would be nice to have the "best of two worlds" with direct rowid lookups and fair weighted index seeks. Are the missing statistics for the rowid tree an omission or would adding this have a broader impact on the code?

regards
gerd

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

Reply via email to