SQLite speed woes - index not being used

Discussion in 'Mac Programming' started by Starfox, Nov 7, 2012.

  1. Starfox macrumors 6502


    Apr 7, 2011
    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.
  2. denniscote macrumors newbie

    Jul 19, 2011
    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.

  3. Starfox thread starter macrumors 6502


    Apr 7, 2011
    Thanks a million, Dennis! I think I know how to work around that one.

Share This Page