sqlite> explain query plan select max(utc_time) from RequestLog; 0|0|0|SEARCH TABLE RequestLog USING COVERING INDEX key (~1 rows) # very fast sqlite> explain query plan select min(utc_time) from RequestLog; 0|0|0|SEARCH TABLE RequestLog USING COVERING INDEX key (~1 rows) # very fast sqlite> explain query plan select min(utc_time), max(utc_time) from RequestLog; 0|0|0|SCAN TABLE RequestLog (~8768261 rows) # will be very very slow
While I use min
and max
separately, it works fine. However, sqlite will βforgetβ the index, while for some reason I choose min
and max
. Is there any configuration I can do (I already used Analyze
, this will not work)? or are there any explanations for this behavior?
EDIT1
sqlite> .schema CREATE TABLE FixLog( app_id text, __key__id INTEGER, secret text, trace_code text, url text, action text,facebook_id text,ip text, tw_time datetime,time datetime, tag text,to_url text, from_url text,referer text,weight integer, Unique(app_id, __key__id) ); CREATE INDEX key4 on FixLog(action); CREATE INDEX time on FixLog(time desc); CREATE INDEX tw_time on FixLog(tw_time desc); sqlite> explain query select min(time) from FixLog; 0|0|0|SEARCH TABLE FixLog USING COVERING INDEX time (~1 rows) sqlite> explain query select max(time) from FixLog; 0|0|0|SEARCH TABLE FixLog USING COVERING INDEX time (~1 rows) sqlite> explain query plan select max(time), min(time) from FixLog; 0|0|0|SCAN TABLE FixLog (~1000000 rows)
source share