Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.

Starfox

macrumors 6502
Original poster
Apr 7, 2011
256
9
I have an SQLite query that seems to be skipping an index I created on the field Time:

sqlite> explain query plan SELECT UserID, JSON FROM TweetsJSON WHERE TweetID <= 9999999 AND Time >= 1352249596 AND Time <= 1353027196 ORDER BY TweetID DESC LIMIT 100 ;
0|0|0|SEARCH TABLE TweetsJSON USING INTEGER PRIMARY KEY (rowid<?) (~27777 rows)

TweetID is a primary key and an index was created on Time using the syntax CREATE INDEX TimeTweetsJSONIndex ON TweetsJSON (Time). What's wrong here? Why is it skipping that index totally? Search times are reflecting that and they're less than satisfactory.
 

denniscote

macrumors newbie
Jul 19, 2011
19
1
SQLite query optimizer

See section 6 of the SQLite query optimizer docs at http://www.sqlite.org/optoverview.html

It explains that only one index can be used per table, and how the optimizer selects which index to use when there are multiple candidates.

To force the optimizer to use your time index instead of the implicit tweetid index in the table you can add a unary + in front of the tweetid in your where clause. This will prevent the optimizer from using an index for the tweetid and it should then select your time index.

HTH
 

Starfox

macrumors 6502
Original poster
Apr 7, 2011
256
9
Thanks a million, Dennis! I think I know how to work around that one.
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.